Веб-приложение или проект Django состоит из отдельных приложений. Вместе они образуют полноценное веб-приложение. Каждое приложение представляет какую-то определенную функциональность или группу функциональностей. Один проект может включать множество приложений. Это позволяет выделить группу задач в отдельный модуль и разрабатывать их относительно независимо от других. Кроме того, мы можем переносить приложение из одного проекта в другой независимо от другой функциональности проекта.
При создании проекта он уже содержит несколько приложений по умолчанию.
django.contrib.admin
django.contrib.auth
django.contrib.contenttypes
django.contrib.sessions
django.contrib.messages
django.contrib.staticfiles
Список всех приложений можно найти в проекте в файле settings.py в переменной INSTALLED_APPS:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
И, конечно, мы можем создавать свои приложения, которые реализуют определенный функционал. Для создания приложения в проекте применяется команда
python manage.py startapp название_приложения
Так, создадим в проекте, созданном в прошлой теме или новом, первое приложение, которое будет называться hello. Для этого выполним в командной строке/терминале следующую команду:
python manage.py startapp hello
В результате в проекте Django будет создано приложение hello. И после выполнения этой команды мы увидим в проекте новую папку, которое будет хранить все файлы созданного приложения:
Рассмотрим вкратце его структуру:
папка migrations: предназначена для хранения миграций - скриптов, которые позволяют синхронизировать структуру базы данных с определением моделей
__init__.py: указывает интерпретатору python, что текущий каталог будет рассматриваться в качестве пакета
admin.py: предназначен для административных функций, в частности, здесь призводится регистрация моделей, которые используются в интерфейсе администратора
apps.py: определяет конфигурацию приложения
models.py: хранит определение моделей, которые описывают используемые в приложении данные
tests.py: хранит тесты приложения
views.py: определяет функции, которые получают запросы пользователей, обрабатывают их и возвращают ответ
Но пока приложение никак не задействуется. Его надо зарегистрировать в проекте Django. Для этого откроем файл settings.py и добавим в конец массива INSTALLED_APPS наше приложение:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'hello', ]
В проекте может быть несколько приложений, и каждое из них надо добавлять таким вот образом.
Теперь определим какие-нибудь простейшие действия, которые будет выполнять данное приложение, например, отправлять в ответ пользователю строку "Hello World".
Для этого перейдем в проекте приложения hello к файлу views.py, который по умолчанию должен выглядеть следующим образом:
from django.shortcuts import render # Create your views here.
Изменим код следующим образом:
from django.http import HttpResponse def index(request): return HttpResponse("Hello METANIT.COM")
В данном случае мы импортируем класс HttpResponse из стандартного пакета django.http.
Затем определяется функция index()
, которая в качестве параметра получает объект запроса request. Класс HttpResponse предназначен для
создания ответа, который отправляется пользователю. И с помощью выражения return HttpResponse("Hello METANIT.COM")
мы отправляем пользователю
строку "Hello METANIT.COM"
Теперь также в основном проекте Django откроем файл urls.py, который позволяет сопоставить маршруты с представлениями, которые будут обрабатывать запрос по этим маршрутам. По умолчанию этот файл выглядит следующим образом:
from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ]
Первой строкой из модуля django.contrib импортируется класс AdminSite, который предоставляет возможности работы с интерфейсом
администратора. Второй строкой из модуля django.urls импортируется функция path. Эта функция
задает сопоставление определенного маршрута с функцией обработки. Так, в данном случае маршрут "admin/" будет обрабатываться методом
admin.site.urls
.
Но выше мы определили функцию index в файле views.py, который возвращает пользователю строку "Hello METANIT.COM". Поэтому изменим файл urls.py следующим образом:
from django.urls import path from hello import views urlpatterns = [ path('', views.index, name='home'), ]
Чтобы использовать функцию views.index вначале импортируем модуль views. Затем определяем сопоставление маршрута ' ' и функции views.index
и
также дополнительно имя для маршрута: name='home'
. По сути маршрут ' ' будет сопоставляться с запросом к корню приложения.
Теперь снова запустим приложение командой
python manage.py runserver
И вновь перейдем в браузере по адресу http://127.0.0.1:8000/, и браузер нам отобразит строку "Hello METANIT.COM":