Создание приложения Django в Python
В этом уроке вы узнаете, как создать новое приложение в проекте Django в Python, как определять представления и сопоставлять их с URL-адресами.
- Проекты и приложения Django
- Создание приложения blog
- Регистрация заявки
- Создание представления
- Добавление дополнительных маршрутов
Проекты и приложения Django
В фреймворке Django:
- Проект представляет собой установку Django с некоторыми настройками.
- Приложение представляет собой группу моделей, представлений, шаблонов и URL-адресов.
Проект Django может иметь одно или несколько приложений. Например, проект похож на веб-сайт, который может состоять из нескольких приложений, таких как блоги, пользователи и вики.
Обычно вы разрабатываете приложение Django, которое может быть повторно использовано в других проектах Django. На следующем рисунке показана структура проекта Django и его приложений:
Создание приложения blog
Чтобы создать приложение, используйте команду startapp следующим образом:
python manage.py startapp app_name
Например, вы можете создать приложение под названием blog, используя команду startapp следующим образом:
python manage.py startapp blog
Команда создает каталог блога с некоторыми файлами:
├── blog | ├── admin.py | ├── apps.py | ├── migrations | ├── models.py | ├── tests.py | ├── views.py | └── __init__.py ├── db.sqlite3 ├── django_project | ├── asgi.py | ├── settings.py | ├── urls.py | ├── wsgi.py | ├── __init__.py | └── __pycache__ └── manage.py
Регистрация заявки
После создания приложения его необходимо зарегистрировать в проекте, особенно если приложение использует шаблоны и взаимодействует с базой данных.
Приложение блога имеет модуль apps.py, который содержит класс BlogConfig, например:
from django.apps import AppConfig class BlogConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'blog'
Чтобы зарегистрировать приложение блога, добавьте класс blog.apps.BlogConfig в список INSTALLED_APPS в settings.py проекта:
INSTALLED_APPS = [ # ... 'blog.apps.BlogConfig', ]
В качестве альтернативы вы можете использовать имя приложения, например blog, в списке INSTALLED_APPS следующим образом:
INSTALLED_APPS = [ # ... 'blog', ]
Создание представления
Файл views.py в каталоге блога содержит следующий код по умолчанию:
from django.shortcuts import render # Create your views here.
Файл views.py будет содержать все представления приложения. Представление — это функция, которая принимает объект HttpRequest и возвращает объект HttpResponse. Это эквивалентно контроллеру в архитектуре MVC.
Чтобы создать новое представление, импортируйте HttpResponse из django.http в файл views.py и определите новую функцию, которая принимает экземпляр класса HttpRequest:
from django.shortcuts import render from django.http import HttpResponse def home(request): return HttpResponse('<h1>Blog Home</h1>')
В этом примере функция home() возвращает новый объект HttpResponse, содержащий фрагмент HTML-кода. HTML-код включает тег h1.
Функция home() принимает экземпляр объекта HttpRequest и возвращает объект HttpResponse. Это называется представлением на основе функций. Позже вы узнаете, как создавать представления на основе классов.
Чтобы сопоставить URL с функцией home(), создайте новый файл urls.py внутри каталога блога и добавьте следующий код в файл urls.py:
from django.urls import path from . import views urlpatterns = [ path('', views.home, name='posts'), ]
Как это работает.
- Сначала импортируем путь из модуля django.urls:
from django.urls import path
- Во-вторых, импортируйте модуль views.py из текущего каталога.
from . import views
Обратите внимание, что это относительный импорт, который импортирует модуль представлений из текущего каталога.
- В-третьих, определите маршрут, который сопоставляет URL-адрес блога с функцией home(), используя функцию path().
urlpatterns = [ path('', views.home, name='posts'), ]
Аргумент ключевого слова name определяет имя маршрута. Позже вы можете ссылаться на URL, используя имя маршрута вместо жестко закодированного URL, например blog/.
Используя имя пути, вы можете изменить URL-адрес пути на что-то другое, например, my-blog/ в urls.py, вместо того, чтобы менять жестко закодированный URL-адрес везде.
Обратите внимание, что последний аргумент пути должен быть ключевым аргументом, например name=’posts’. Если вы используете позиционный аргумент, например:
from django.urls import path from . import views urlpatterns = [ path('', views.home, 'posts'), # Error ]
вы получите следующую ошибку:
TypeError: kwargs argument must be a dict, but got str.
Чтобы маршруты блога работали, необходимо включить urls.py приложения блога в файл urls.py проекта Django:
from django.contrib import admin from django.urls import path, include # new urlpatterns = [ path('admin/', admin.site.urls), path('blog/', include('blog.urls')), # new ]
В urls.py проекта мы импортируем функцию include из django.urls и сопоставляем путь блога с blog.urls.
При этом, когда вы перейдете по адресу http://127.0.0.1:8000/blog/, Django запустит функцию home() модуля views.py и вернет веб-страницу, отображающую тег h1.
Перед открытием URL-адреса необходимо запустить веб-сервер разработки Django:
python manage.py runserver
При переходе по адресу http://127.0.0.1:8000/blog/ вы увидите веб-страницу с заголовком «Главная страница блога».
Вот как это происходит:
- Сначала веб-браузер отправляет HTTP-запрос на URL-адрес http://127.0.0.1:8000/blog/
- Во-вторых, Django выполняет urls.py в каталоге django_project. Он сопоставляет blog/ с URL в списке urlpatterns в urls.py. В результате он отправляет » в urls.py приложения блога.
- В-третьих, Django запускает файл urls.py в приложении блога. Он сопоставляет » URL с функцией views.home и выполняет ее, что возвращает ответ HTTP, который выводит тег h1.
- Наконец, Django возвращает веб-страницу в веб-браузер.
Добавление дополнительных маршрутов
Сначала определите функцию about() в файле views.py приложения блога:
from django.shortcuts import render from django.http import HttpResponse def home(request): return HttpResponse('<h1>Blog Home</h1>') def about(request): return HttpResponse('<h1>About</h1>')
Затем добавьте маршрут в файл urls.py:
from django.urls import path from . import views urlpatterns = [ path('', views.home, name='posts'), path('about/', views.about, name='about'), ]
В-третьих, откройте URL-адрес http://127.0.0.1:8000/blog/about/, и вы увидите страницу, отображающую страницу «О нас».
Теперь, если вы откроете домашний URL-адрес, вы увидите страницу, на которой отображается сообщение «страница не найдена» с кодом статуса HTTP 404.
Причина в том, что urls.py в django_project не имеет маршрута, который сопоставляет домашний URL с представлением.
Чтобы сделать приложение блога домашней страницей, вы можете изменить маршрут с blog/ на » следующим образом:
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('blog.urls')), ]
Если вы откроете URL http://127.0.0.1:8000, вы увидите домашнюю страницу блога. А переход по URL http://127.0.0.1:8000/about/ перенесет вас на страницу «О нас».