Создание приложения Django в Python

В этом уроке вы узнаете, как создать новое приложение в проекте Django в Python, как определять представления и сопоставлять их с URL-адресами.

Содержание

Проекты и приложения Django

В фреймворке Django:

  • Проект представляет собой установку Django с некоторыми настройками.
  • Приложение представляет собой группу моделей, представлений, шаблонов и URL-адресов.

Проект Django может иметь одно или несколько приложений. Например, проект похож на веб-сайт, который может состоять из нескольких приложений, таких как блоги, пользователи и вики.

Обычно вы разрабатываете приложение 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/ перенесет вас на страницу «О нас».

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *