Демистификация магии Джанго

Опубликовано: 2022-03-10
Краткое резюме ↬ В этой статье мы подробно рассмотрим, что Django привносит в таблицу, понимая, что делают сгенерированные файлы и папки, это поможет нам лучше понять структуру Django.

Согласно официальной документации,

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 . Каталог должен выглядеть так,

показывает каталог после startproject.
Отображение папки после запуска startproject. (Большой превью)

Нам нужно перейти во вновь созданный каталог и запустить команду для создания приложения .

 cd ecommerce_site python manage.py startapp trading

startapp — это команда, выполняемая manage.py в каталоге проекта, она создает несколько файлов и папку, названную с использованием имени, указанного в команде, в данном случае указано trading . Папка приложения состоит из простых файлов, которые необходимы для создания функций приложения. Теперь ваш каталог должен выглядеть так:

показывает каталог после startapp.
Отображение папки после запуска startapp. (Большой превью)

Если вам интересно, в чем разница между проектом и приложением. Проект — это веб-приложение 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/ приведет к сеансу входа в систему, когда вы войдете в систему (с созданным вами именем пользователя и паролем), вы будете перенаправлены на панель администратора:

это показывает панель администратора.
Панель администратора предоставлена ​​Django. (Большой превью)

Группы и пользователи являются конфигурациями по умолчанию, которые позволяют администратору получать доступ к управлению пользователями и разрешениям. Теперь давайте зарегистрируем наши модели.

В 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/.

показывает сайт, когда вы посещаете URL-адрес заказа.
Посещенный URL-адрес заказа. (Большой превью)

Примечание . Процесс запуска startproject и startapp не является обязательным, но настоятельно рекомендуется Django. И вы можете создавать/перемещать файлы и папки после выполнения каждой команды для вашего удобства.

Дерево зависимостей

Вот процесс, в котором Django обрабатывает запросы от поступающих URL-адресов:

  1. Django ищет корневое расположение (путь) для ваших URL-адресов в переменной ROOT_CONF .
  2. Django загружает файл Python, указанный по указанному пути. И находит переменную urlpatterns , это список, содержащий все экземпляры django.urls.path() и/или django.urls.re_path() .
  3. В списке Django идет по порядку и ищет соответствующий URL-адрес.
  4. Python импортирует и вызывает представление (представление на основе функций или классов). Что дополнительно передается с HTTP-запросом.
  5. Представление обрабатывает запрос и переданную информацию и либо возвращает сообщение/шаблон, либо перенаправляет на другое представление.
  6. Если шаблон URL-адреса не совпадает или если в какой-либо момент этого процесса возникает исключение, Django вызывает соответствующее представление обработки ошибок.
Дерево, показывающее, как Django обрабатывает запросы.
Обработка запросов Django. (Большой превью)

Заключение

Мы узнали о возможности создания файлов для Django без командной строки. Также мы узнали о преимуществах и основных элементах проекта Django. Django — отличный инструмент для создания серверных проектов с целью создания простоты.

Вы можете проверить код для этого руководства на GitHub.

Ресурсы

  • Управление паролями в Джанго
  • Джанго: Начало
  • Джанго: Настройки
  • Легкий Django от O'Reilly