Демистификация магии Джанго
Опубликовано: 2022-03-10Согласно официальной документации,
Django — это высокоуровневая веб-инфраструктура Python, которая способствует быстрой разработке и чистому прагматичному дизайну. Созданный опытными разработчиками, он берет на себя большую часть хлопот, связанных с веб-разработкой, поэтому вы можете сосредоточиться на написании своего приложения, не изобретая велосипед. Это бесплатно и с открытым исходным кодом.
— DjangoProject.com
Это одна из популярных платформ Python для создания веб-приложений, и она наиболее предпочтительна из-за своей масштабируемости при создании шаблона с установленными конфигурациями и файлами. Это завершает всю цель Django для разработчиков;
«... создание отличного приложения за короткое время и меньше забот о базовых настройках».
Существуют базовые конфигурации, файлы и стили, применимые ко всем веб-приложениям, независимо от того, что вы создаете. При использовании Django они генерируются автоматически, когда вы запускаете определенные команды в разные моменты цикла разработки вашего приложения. Благодаря этому у вас будет достаточно времени, чтобы сосредоточиться на основном аспекте разработки вашего приложения, в то время как Django позаботится обо всем остальном.
Это означает, что под капотом происходит много вещей. Для тех, кто не имеет полного представления о движущихся частях, это может быть ошеломляющим. В этой статье мы узнаем о следующем:
- Установка Джанго
-
startproject
иstartapp
- Файлы конфигурации Django, которые включают в себя;
- settings.py
- urls.py
- управлять.py
- Макет моделей
- Маршрутизация
Мы узнаем, как все это сочетается друг с другом и какую роль они играют. Важно знать, что посмотреть на все, что происходит внутри Django, не получится. Для случаев, выходящих за рамки этого руководства, будут ссылки, указывающие на ресурсы, которые помогут в этом.
В учебных целях мы будем создавать платформу электронной коммерции. Это не полноценный сайт электронной коммерции, наше приложение будет иметь только две основные функции; создание продуктов и оформление заказов с точки зрения администратора.
Эта статья поможет вам разобраться в готовых командах, файлах и основах Django. Он предназначен для разработчиков, которые использовали Django или собираются использовать его и хотят знать, что происходит под капотом. Хотя использование Django не является обязательным, знакомство с основами Django перед тем, как продолжить изучение этой статьи, даст вам преимущество. Вам необходимо иметь практические знания Python, чтобы полностью понять, о чем пойдет речь в этой статье.
Установка Джанго
Если у вас еще не установлен Django, выполните следующие действия.
Сначала создайте виртуальную среду с именем djangodev
. Это необходимо для изоляции рабочего пространства Django и зависимых от него пакетов.
python3 -m venv ~/.virtualenvs/djangodev
Теперь, чтобы попасть в вашу виртуальную среду, вам нужно активировать ее;
source ~/.virtualenvs/djangodev/bin/activate
Если вы получаете какую-либо ошибку при работе с source
, вы можете использовать эту альтернативную команду:
. ~/.virtualenvs/djangodev/bin/activate
Для пользователей Windows используйте это вместо этого,
...\> %HOMEPATH%\.virtualenvs\djangodev\Scripts\activate.bat
Примечание. Вам необходимо активировать виртуальную среду каждый раз, когда вы хотите использовать Django.
Теперь, когда вы находитесь в своей виртуальной среде, установите Django:
python -m pip install Django
Чтобы проверить правильность установки Django, запустите;
python -m django --version
Шакабум! Теперь вы готовы к магии, готовьте палочки!
Метод создания файлов и папок на ходу может быть простым и понятным. Однако это не идеально, когда вам нужно создать средний или крупный проект и уложиться в срок. У нас всегда есть крайний срок, даже для личных проектов.
Следуя этому методу при создании нового большого проекта, вам придется создать несколько файлов и папок и выполнить множество настроек, что может привести к созданию ошибок, которых можно избежать, и к большому количеству потраченного времени. startproject
и startapp
, доступные нам через Django, призваны решить эту проблему. Эти две команды создают файлы, папки и выполняют множество настроек за вас.
Начнем с создания нового приложения с помощью команды startproject
.
Скаффолдинг приложения
Мы сгенерируем наше приложение и посмотрим на сгенерированные файлы, а также на несколько команд, которые будем использовать. Запустите эту команду в своем терминале, чтобы начать;
django-admin startproject ecommerce_site
При установке Django к вашему пути добавляется django-admin
, чтобы дать ему доступ для выполнения своих действий. Это утилита командной строки Django для выполнения административных функций. Узнайте больше об использовании django-admin
здесь; это немного выходит за рамки этой статьи.
startproject
— это команда Django, которая помогает создать проект . Здесь мы передаем ему имя нашего проекта ecommerce_site . Затем он создает проект в каталоге с именем ecommerce_site . Каталог должен выглядеть так,
Нам нужно перейти во вновь созданный каталог и запустить команду для создания приложения .
cd ecommerce_site python manage.py startapp trading
startapp
— это команда, выполняемая manage.py
в каталоге проекта, она создает несколько файлов и папку, названную с использованием имени, указанного в команде, в данном случае указано trading
. Папка приложения состоит из простых файлов, которые необходимы для создания функций приложения. Теперь ваш каталог должен выглядеть так:
Если вам интересно, в чем разница между проектом и приложением. Проект — это веб-приложение Django, оно может состоять из одного или нескольких приложений. Это папка, содержащая manage.py
и другой модуль , который включает в себя settings.py
и другие файлы. Приложение — это пакет Python, который выполняет определенную функцию, включает такие файлы, как models.py
, каталог миграции и многое другое. Вы можете проверить этот ответ на Stack Overflow для получения дополнительной информации.
startproject
создаст основной каталог проекта, а startapp
создаст каталог приложения. Оба также получили имя для использования в поколении. Команда startproject
первой при создании нового проекта, тогда как startapp
запускается внутри каталога нового проекта.
Текущий макет — отличное отображение, которое вы можете использовать для любого приложения, которое вы создаете. Он масштабируемый и состоит из файлов, которые вам понадобятся. Есть возможность создавать, переименовывать, редактировать и перемещать файлы внутри проекта.
Конфигурация Джанго
Django предоставляет вам различные настройки и конфигурации. После запуска двух команд в разных файлах давайте пробежимся по сгенерированным файлам, чтобы узнать, что делает каждая из них.
settings.py
Большинству веб-приложений нужны такие конфигурации, как; аутентификация для проверки пользователей, разрешения для определенных пользователей с определенными способностями и установки стандартов безопасности. Все это необходимо, чтобы предоставить вашим пользователям наилучший опыт. Вам, как разработчику, потребуется много времени, чтобы начать внедрять каждый из них самостоятельно для каждого приложения, над которым вы работаете.
Django предоставляет вам эти необходимые конфигурации и многое другое — так что вы можете выбрать те, которые вам нужны, и подключить их. Это делается в settings.py
, там уже созданы настройки для предоставления вам основных функций.
Когда Django пытается запустить проект, он ищет определенные переменные. Файл settings.py
содержит те переменные, которые ведут к другим файлам или информации. Django обращается к этому файлу из файла manage.py
и берет информацию или загружает другие файлы, к которым он ведет, отсюда.
Эти конфигурации включают в себя:
-
DEBUG
Для функцииDEBUG
задано значениеTrue
, чтобы разрешить чтение ошибок и отладочный код в процессе разработки. Во время производства (т. е. при развертывании) для нее должно быть установлено значениеFalse
. Этот параметр позволяет вам лучше отлаживать свой код с помощью Django, когда он пытается запустить ваш код. -
INSTALLED_APPS
Это список всех приложений, выполняющих определенную функцию в Django. Он поставляется с некоторыми приложениями по умолчанию, такими как'django.contrib.auth'
который используется для аутентификации пользователей,django.contrib.admin'
для функций администратора и'django.contrib.messages'
необходимых для отправки уведомлений или информации пользователям. Любое другое приложение, которое вы создаете с помощью командыstartapp
, должно быть здесь, прежде чем Django сможет его запустить. -
MIDDLEWARE
— это легкая структура для обработки входных и выходных данных, поступающих через запросы и ответы Django. Каждое промежуточное программное обеспечение выполняет определенную функцию с приложением, например,'django.contrib.auth.middleware.AuthenticationMiddleware'
работает с'django.contrib.sessions'
чтобы связывать пользователей с запросами. Вы должны проверить дополнительные функции каждого промежуточного программного обеспечения в документации. -
ROOT_URLCONF
— это переменная для пути, по которому Django ищет вашиurlpatterns
, когда запрос передается вашему приложению Django. Всякий раз, когда в приложении Django делается запрос, Django ищет эту переменную, загружает начальный файл и циклически просматривает списокurlpatterns
в поисках соответствующего пути. -
TEMPLATES
— это параметр, позволяющий отображать файлы HTML для представления представления. Он взаимодействует с приложениями запросов, аутентификации и сообщений. Значение'BACKEND'
и значение'APP_DIRS'
вTrue
позволяют Django искать файлы HTML в папке /templates .'context_processors'
вOPTIONS
— это вызываемые объекты , которые принимают запрос в качестве аргумента и объединяют его с контекстом при отображении шаблона. Эти вызываемые объекты работают, чтобы помочь с отладкой, аутентификацией и обработкой запросов в целом. -
WSGI_APPLICATION
— это путь, ведущий к переменнойapplication
в файлеwsgi.py
-
DATABASE
— это словарь, который содержит доступ к внешней базе данных (или внутренней, как в случае sqlite по умолчанию), такой как PostgresSQL, MySQL и MongoDB. Вот пример базы данных Postgres, которую я буду использовать для нашего примера:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'db_name', 'USER': 'db_user', 'PASSWORD': 'db_password', 'HOST': 'localhost', 'PORT': '', } }
Вы можете использовать базу данных sqlite по умолчанию, это не очень подходит для производства. Вы можете настроить базу данных Postgres, как описано выше, вам нужно будет сначала создать базу данных и передать пользователю пароль с разрешением на запись в базу данных.
Примечание . Для целей этого руководства вы уже можете использовать набор баз данных sqlite по умолчанию. Выше показано, как вы можете установить соединение с базой данных SQL и NO-SQL в Django.
-
AUTH_PASSWORD_VALIDATORS
— это функции, которые вызываются для проверки пароля. Они вызываются при создании записей пользователей (да и админов тоже), сбросе и смене паролей. Подробнее о них можно узнать из официальной документации.
Дополнительную документацию по настройкам можно найти здесь.
manage.py
Большинству веб-проектов нужна точка входа, с которой начинаются команды. Точка входа, действующая как шлюз в приложение. В каждом проекте Django это обычно файл manage.py
.
Этот файл необходим в качестве отправной точки в вашем приложении. Отсюда запускаются все команды и здесь все запускается.
manage.py
выполняет ту же функцию, что и django-admin. Он также сообщает Django расположение конфигураций, которые есть в вашем приложении. Это установлено по умолчанию и не требует изменения.
Он использует функцию def main()
для обработки модуля настроек по умолчанию в нашем файле settings.py
. Он пытается импортировать функцию выполнения, и если она сталкивается с ошибкой, она выдает ImportError
. В противном случае он принимает любой аргумент, переданный sys.argv
из командной строки, и выполняется.
sys.argv
— это список, который принимает команду, переданную через терминал. Когда мы запускаем python manage.py runserver
в командной строке, sys.argv
получает значение ["manage.py", "runserver"]
и передается в функцию execute()
.
Такие аргументы, как python manage.py startapp trading
или python manage.py makemigrations
, для выполнения устанавливаются в [ "manage.py", "startapp", "trading"]
и ["manage.py", "makemigrations"]
соответственно.
Оператор if настроен на выполнение, если указанная команда настроена на manage.py
.
Помимо запуска функций django-admin
, вы будете использовать его для запуска сервера, обработки миграций и других команд, которые будет использовать ваш проект. Он также понадобится вам при развертывании, тестировании и отладке ваших проектов.
Макет модели
Django предоставляет вам простую схему моделирования. Вы настраиваете свои модели в файле models.py
в trading
каталоге. Ваши классы (или модели) — это макеты, которым будут следовать ваши таблицы базы данных.
Вы определяете свои классы на основе типов данных, которые хотите получить от пользователя (или администратора) для каждой таблицы. Наши модели создают файл миграции, который работает с переменной DATABASE
в settings.py
.
Давайте создадим две модели, которые нам понадобятся, для продуктов и заказов:
from django.db import models class Product(models.Model): name = models.CharField(max_length=50) image = models.ImageField(upload_to='products', default='python.png') price = models.IntegerField() description = models.TextField() def __str__(self): return self.name class Order(models.Model): product = models.ForeignKey(Product, on_delete=models.CASCADE) quantity = models.IntegerField() date = models.DateField(auto_now_add=True) user = models.CharField(max_length=50) def __str__(self): return self.user
Модель продукта имеет столбцы имени, цены, описания и изображения (которое при сохранении будет загружено в папку products
. Оно создается, если папка не существует). В order
есть product
(связанный с таблицей products
), количество, дата и пользовательские столбцы.
С помощью этой информации Django создает схему базы данных для приложения. Кроме того, создает API доступа к базе данных Python для доступа к объектам Product и Order. В Django есть встроенный инструмент миграции, поэтому вам не нужно использовать внешние пакеты для миграции.
Следующим шагом является запуск команды миграции и миграция в базу данных. Но прежде чем мы это сделаем, мы должны зарегистрировать trading
как приложение в каталоге нашего проекта.
Во-первых, мы должны настроить торговый каталог как приложение в Django. Django сделал это за вас в файле app.py
Этот файл регистрирует trading
как приложение и в дальнейшем будет использоваться в файле settings.py
.
Теперь в settings.py
добавляем trading
в INSTALLED_APP
. Это должно выглядеть так:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'trading.apps.TradingConf', ]
На терминале запустите:
$ python manage.py makemigrations trading $ python manage.py migrate
Примечание. Ваша виртуальная среда должна быть активирована, и вы должны находиться в каталоге проекта.
python manage.py makemigrations trading
принимает к сведению изменения, сделанные в торговом модуле, и создает файл в папке migration
изменений в models.py
и python manage.py migrate
, а затем обновляет изменения.
Вы можете найти сгенерированный файл миграции с python manage.py makemigrations trading
в каталоге migration
с именем 0001_initial.py
. Вы можете видеть классы и столбцы как команды для создания внутри файла. По мере внесения дополнительных изменений в models.py
здесь будет создаваться больше файлов.
Функции администратора
В нашем текущем приложении нам понадобятся функции администратора для управления продуктами и заказами, которые будут созданы в приложении. Django предоставляет нам встроенные функции администратора, которые уже есть в нашем распоряжении. Приложение администратора (функция) также было зарегистрировано в нашем списке INSTALLED_APP
; 'django.contrib.admin'
.
Кроме того, URL-адрес для администратора также был зарегистрирован в списке urlpatterns
URL-адресов в нашем файле конфигурации URL-адресов urls.py
; path('admin/', admin.site.urls),
. Файл admin.py
позволяет вам регистрировать модели и действия CRUD, которые должны выполняться с моделями.
Чтобы настроить администратора, запустите это на терминале:
$ python manage.py createsuperuser
Вам будет предложено ввести имя пользователя, адрес электронной почты и пароль. После этого вы успешно создали admin. Чтобы начать работу с функциями администратора, запустите сервер:
$ python manage.py runserver
Посещение https://127.0.0.1:8000/admin/ приведет к сеансу входа в систему, когда вы войдете в систему (с созданным вами именем пользователя и паролем), вы будете перенаправлены на панель администратора:
Группы и пользователи являются конфигурациями по умолчанию, которые позволяют администратору получать доступ к управлению пользователями и разрешениям. Теперь давайте зарегистрируем наши модели.
В admin.py
добавьте следующие строки:
from django.contrib import admin # Register your models here. from .models import Product, Order admin.site.register(Product) admin.site.register(Order)
from django.contrib import admin
импортирует функции администратора из Django, а затем мы импортировали два класса из нашего models.py
и зарегистрировали их, чтобы администратор мог выполнять действия CRUD с продуктами и заказами с панели инструментов.
После регистрации моделей ваша панель инструментов должна выглядеть так:
Добавление продуктов:
Оформление заказов из админки:
Простая маршрутизация
Каждому сайту нужен маршрут или URL-адреса, ведущие к определенным страницам с определенной информацией для конечного пользователя. Доступ к коллекциям аналогичной информации или приложений осуществляется по определенному маршруту. Существует необходимость группировать маршруты вместе для обеспечения доступности и связи внутри файлов. Django сделал это за вас в файле urls.py
urls.py
— это файл, ведущий от переменной ROOT_CONF
в settings.py
. Здесь выполняется наша основная настройка URL. Когда мы создаем представления в разных файлах или папках или даже в файле urls.py
, их необходимо настроить в списке urlpatterns
.
Django ожидает список с именем urlpatterns
в файле. Вы можете изменить файл в переменной ROOT_CONF
на любой другой файл, который вы разместили в списке urlpatterns
.
urlpatterns = [ path('admin/', admin.site.urls), ]
Список состоит из объектов, являющихся экземплярами path
или re-path
. У каждого экземпляра есть два обязательных параметра: шаблон 'admin/'
и файл представления или URL-адреса admin.site.urls
.
Экземпляры также могут вести к другому файлу с дополнительными конфигурациями URL. Это сделано для удобства чтения.
views.py
Важной потребностью для серверного приложения являются представления, на которые сопоставляется каждый маршрут. В Django вы пишете свои функции или представления на основе классов для приложения в файле views.py
. Представление — это класс или функция, которая обрабатывает запрос и отправляет ответ вашему пользователю.
Отредактируйте файл views.py
следующим образом:
from django.http import HttpResponse def home(request): return HttpResponse("This is a shopping site for products") def order(request): return HttpResponse("Hello, welcome to our store, browse to our products and order!")
Здесь мы импортировали HTTPResponse
, чтобы использовать его при определении двух представлений (представлений функций) для возврата предложения при вызове. def home
должен вызываться при посещении основного адреса и def order
при доступе к URL-адресу заказа.
После создания наших представлений нам нужно назначить их различным маршрутам (или urlpatterns
). Это можно сделать несколькими способами: мы можем создать список urlpatterns
-адресов в том же файле или импортировать trading.views
в файл ecommerce_site.urls
и создать путь.
Предпочтительный способ сделать это — создать файл конфигурации дополнительного URL-адреса (внутри trading
) и включить его в ecommerce_site.urls
. Создайте файл urls.py
в trading
каталоге. Ваш каталог должен выглядеть так:
trading/ __init__.py admin.py apps.py migrations/ __init__.py 0001_initial.py models.py tests.py urls.py views.py
Добавьте следующий код в новый файл ( urls.py
)
from django.urls import path from . import views urlpatterns = [ path('', views.home, name='home'), path('order/', views.order, name='order'), ]
Давайте зарегистрируем файл конфигурации trading
URL-адресов ( urls.py
) в файле конфигурации URL-адресов проекта,
from django.contrib import admin from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), path('', include('trading.urls')) ]
Чтобы получить доступ к urlpatterns
, мы будем использовать класс include
из django.urls
в строке 2. Затем выберите шаблон и прикрепите файл urls.py
в торговом каталоге.
Здесь мы импортировали класс path
из django и файл views.py
. Тогда наш список состоит из двух экземпляров пути для каждого представления. Таким образом, def home
называется https://127.0.0.1:8000/.
И def order
вызывается на https://127.0.0.1:8000/order/.
Примечание . Процесс запуска startproject
и startapp
не является обязательным, но настоятельно рекомендуется Django. И вы можете создавать/перемещать файлы и папки после выполнения каждой команды для вашего удобства.
Дерево зависимостей
Вот процесс, в котором Django обрабатывает запросы от поступающих URL-адресов:
- Django ищет корневое расположение (путь) для ваших URL-адресов в переменной
ROOT_CONF
. - Django загружает файл Python, указанный по указанному пути. И находит переменную
urlpatterns
, это список, содержащий все экземплярыdjango.urls.path()
и/илиdjango.urls.re_path()
. - В списке Django идет по порядку и ищет соответствующий URL-адрес.
- Python импортирует и вызывает представление (представление на основе функций или классов). Что дополнительно передается с HTTP-запросом.
- Представление обрабатывает запрос и переданную информацию и либо возвращает сообщение/шаблон, либо перенаправляет на другое представление.
- Если шаблон URL-адреса не совпадает или если в какой-либо момент этого процесса возникает исключение, Django вызывает соответствующее представление обработки ошибок.
Заключение
Мы узнали о возможности создания файлов для Django без командной строки. Также мы узнали о преимуществах и основных элементах проекта Django. Django — отличный инструмент для создания серверных проектов с целью создания простоты.
Вы можете проверить код для этого руководства на GitHub.
Ресурсы
- Управление паролями в Джанго
- Джанго: Начало
- Джанго: Настройки
- Легкий Django от O'Reilly