# Основы Python Django --- Почему Django? ---- Django (Джанго) — свободный фреймворк для веб-приложений на языке Python, использующий шаблон проектирования MVC. Проект поддерживается организацией Django Software Foundation. Веб-фреймворк Django используется в сайтах Instagram, Disqus, Mozilla, The Washington Times, Pinterest, YouTube, Google и др. ---- Django на сегодняшний день, без сомнения, является одним из самых популярных веб фреймворков Python. Пожалуй лучшей иллюстрацией возможностей этого фреймворка может послужить Instagram, созданный на Django в 2010 г. и проданный Facebook в 2012 г. за $1 млрд. --- ## Установка Django и создание первого проекта ---- Для корректной установки Django в начале нужно созадать папку проекта (латиницей). Затем в созданную папку установить Django и pipenv посредством утилиты pip, поставляемой в составе Python и выполняющей установку дополнительных библиотек из интернет-репозитория PyPI. Запустим командную строку и введем в ней такую команду: ``` pip install pipenv pipenv install Django pipenv shell ``` ---- ![](https://i.imgur.com/7l4W0Ff.png) ---- Создадим новый, пока еще пустой проект Django, которому дадим имя samplesite. Для этого в запущенной ранее командной строке перейдем в папку, в которой должна находиться папка проекта, и отдадим команду: `django-admin startproject samplesite .` ---- ![](https://i.imgur.com/MuS1A40.png) ---- Пакет конфигурации включает в себя такие модули: * `__init__.py` * `settings.py` * `urls.py` * `wsgi.py` * `asgi.py` (начиная с Django 3.0) ---- В состав Django входит отладочный веб-сервер, написанный на самом языке Python. Чтобы запустить его, следует в командной строке перейти непосредственно в папку проекта и отдать команду: `python manage.py runserver` ---- ![](https://i.imgur.com/NbOAPjZ.png) --- ## Приложения Django ---- Приложение в терминологии Django — это отдельный фрагмент функциональности разрабатываемого сайта, более или менее независимый от других таких же фрагментов и входящий в состав проекта. ---- Новое приложение создается следующим образом: Сначала остановим отладочный веб-сервер. В командной строке проверим, находимся ли мы в папке проекта, и наберем команду: `python manage.py startapp bboard` ---- ![](https://i.imgur.com/o3lpX5c.png) ---- Команда startapp утилиты `manage.py` запускает создание нового приложения, имя которого указано после этой команды. ---- Зарегистрируем только что созданное приложение в проекте. Найдем в пакете конфигурации файл settings.py, откроем его в текстовом редакторе и отыщем следующий фрагмент кода: ``` INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] ``` ---- Список, хранящийся в переменной `installed apps`, перечисляет все приложения, зарегистрированные в проекте и участвующие в его работе. ---- Добавим приложение bboard, включив в список новый элемент: ``` INSTALLED_APPS = [ ... 'bboard.apps.BboardConfig', ] ``` Мы указали строку с путем к классу BboardConfig, описывающему конфигурацию приложения и объявленному в модуле apps.py пакета приложения bboard. --- ## Контроллер Django ---- Контроллер Django (он же view или представление) — это код, запускаемый при обращении по интернет-адресу определенного формата и в ответ выводящий на экран определенную веб-страницу. Контроллер Django может представлять собой как функцию (контроллер-функция), так и класс (контроллер-класс). ---- Откроем модуль `views.py` пакета приложения bboard, удалим имеющийся там небольшой код и заменим его следующим кодом: ``` from django.http import HttpResponse def index(request): return HttpResponse("Здесь будет выведен список объявлений.") ``` ---- Любой контроллер-функция в качестве единственного обязательного параметра принимает экземпляр класса HttpRequest, хранящий различные сведения о полученном запросе: запрашиваемый интернет-адрес, данные, полученные от посетителя, служебную информацию от самого веб-обозревателя и пр. По традиции этот параметр называется request. ---- В теле функции мы создаем экземпляр класса `HttpResponse` (он объявлен в модуле `django.http`), который будет представлять ответ, отправляемый клиенту. Содержимое этого ответа указываем единственным параметром конструктора этого класса. Готовый экземпляр класса возвращаемв качестве результата. --- ## Маршрутизатор Django ---- При поступлении любого запроса от клиента Django выделяет из запрашиваемого интернет-адреса путь, который передает маршрутизатору. Последний последовательно сравнивает его с шаблонными путями из списка маршрутов. Как только будет найдено совпадение, маршрутизатор передает управление контроллеру, связанному с совпавшим шаблонным путем. ---- Откроем модуль `urls.py` в текстовом редакторе и посмотрим, что он содержит: ``` from django.contrib import admin from django.urls import path urlpatterns = [ path ('admin/', admin.site.urls), ] ``` ---- Список маршрутов, оформленный в виде обычного списка Python, присваивается переменной `urlpatterns`. Каждый элемент списка маршрутов (т.е. каждый маршрут) должен представляться в виде результата, возвращаемого функцией `path()` из модуля `django.urls`. Последняя в качестве параметров принимает строку с шаблонным путем и ссылку на контроллер-функцию. ---- Добавим в список новый маршрут, связывающий шаблонный путь `bboard/` и контроллер-функцию `index()`. Для чего дополним имеющийся в модуле `urls.py` следующий код: ``` from django.contrib import admin from django.urls import path from bboard.views import index urlpatterns = [ path('bboard/', index), path('admin/', admin.site.urIs), ] ``` ---- ![](https://i.imgur.com/gxjODlt.png) ---- Маршрутизатор Django при просмотре списка маршрутов не требует, чтобы путь, полученный из клиентского запроса (реальный), и шаблонный путь, записанный в очередном маршруте, совпадали полностью. Достаточно лишь того факта, что шаблонный путь совпадает с началом реального. ---- Начнем со списка маршрутов уровня приложения bboard. Создадим в пакете этого приложения (т. е. в папке bboard) файл urls.py и занесем в него следующий код: ``` from django.urls import path from .views import index urlpatterns = [ path('', index), ] ``` ---- Наконец, исправим код модуля urls.py из пакета конфигурации. ``` from django.contrib import admin from django.urls import path, include urlpatterns = [ path(`bboard/`, include(`bboard.urls`)), path(`admin/`, admin.site.urls), ] ``` ---- Вложенный список маршрутов, указываемый во втором параметре функции path(), должен представлять собой результат, возвращенный функцией include () из модуля django.urls. В качестве единственного параметра эта функция принимает строку с путем к модулю, где записан вложенный список маршрутов.
{"metaMigratedAt":"2023-06-16T10:42:26.202Z","metaMigratedFrom":"Content","title":"Основы Python Django","breaks":true,"contributors":"[{\"id\":\"0d39d5a3-691d-488c-8f1e-1a0fb0be4f13\",\"add\":17891,\"del\":10975}]"}
    589 views