21. Структура и основные элементы работы с проектом в Django.
Установка и создание заготовки проекта
Сперва необходимо установить Django, в WINDOWS это можно сделать следующей командой в терминале:
pip install django
При условии успешно установленного Django создать заготовку для нового проекта можно следующей консольной командой:
# django-admin.py startproject projectname
Результат этого будет выглядеть как-то так:
# projectname # | manage.py # | projectname # | __init__.py # | settings.py # | urls.py # | wsgi.py
- projectname (внешний) - корневая директория проекта, её название не важно (можно переименовать)
- manage.py - вспомогательный скрипт, позволяющий взаимодействовать с и управлять созданным проектом
- projectname (вложенный) - директория, которая является Python-пакетом вашего проекта (например, используется как корневая при импортах и т.п.)
__init__.py
- обычный пустой файл (служит для задания Python-пакета)- settings.py - настройки проекта
- wsgi.py - входная точка для веб-серверов поддерживающих wsgi для работы с проектом.
База данных
- Перед использованием необходимо определить в настройках базу данных.
- По-умолчанию выбрана SQLite (всё хранится в файле) и с ней проще всего начать работать, если нужно быстро попробовать Django.
- Для более менее серьёзных задач нужно выбирать более подходящую базу данных с нужными возможностями (рекомендуется попробовать PostgreSQL).
- Лучше сразу выбрать ту базу, с которой будете дальше работать, т.к. переход с одной БД на другую может быть нетривиальным.
Сервер
- В общем случае ещё нужно проводить дополнительные настройки сервера и взаимодействия приложения с отдельным веб-сервером.
- Для упрощения разработки в Django встроен простой веб-сервер.
- Он предназначен только для разработки - как самостоятельный веб-сервер он сильно ограничен и использовать его для чего-то серьёзного строго не рекомендуется:
- мало возможностей
- не предназначен для нагрузки
- может быть более уязвимым с точки зрения безопасности
Запустить встроенный сервер можно следующей командой:
# python manage.py runserver 0.0.0.0:8000
Здесь:
- 0.0.0.0 - ip-адрес (должен быть на текущей машине) по которому будет доступен сервер.
- 127.0.0.1 - только локально
- 0.0.0.0 - все публичные ip-адреса текущего сервера
- xxx.xxx.xxx.xxx - какой-то определённый адрес
- 8000 - номер порта по которому будет происходить соеднинение и работа с сервером.
У встроенного сервера есть удобное свойство: он автоматически перегружается, когда изменяются файлы проекта (правда, только существующие, при добавлении новых может быть нужен ручной перезапуск).
Проекты и приложения
- Выше мы создали простейший пустой проект (project) - по сути, в нём пока есть только конфигурация.
- Проект (в терминах Django) - совокупность конфигурации и множества приложений (app, application) составляющих отдельный веб-сайт.
- Приложение - часть проекта предназначенная для выполнения определённой выделенной цели.
- Проект состоит из приложений.
- Приложение может быть в разных проектах (переиспользоваться).
Общая организация Django-приложения
Файл с настройками
settings.py
Создание приложения
Далее мы будем рассматривать создание простого Django-приложения на примере приложения для голосования (стандартный пример из официальной документации).
Приложения могут размещаться в любом месте доступном через PYTHONPATH.
Можно, например, размещать на одном уровне с manage.py (для доступа при импорте через имя приложения). Или внутри пакета проекта, чтобы всё имело общий корень.
Создадим новое приложение:
# python manage.py startapp polls
Основные файлы
- urls.py
- содержат routes (роуты)
- задают соответствие между урлами и обработчиками запросов (view)
- views.py
- содержит view (вид, вьюха)
- на вход view получает объект представляющий собой запрос
- на выход отдают объект-ответ
- объект ответ часто включет в себя сгенерированный с помощью шаблонов (templates) html
- шаблоны (templates)
- набор html-подобного текста с вкраплениями инструкций на языке Django-шаблонизатора
- позволяют леко генерировать html по данным
- models.py
- содержит models (модели)
- специальные классы описывающие элементы хранимые в базе данных
- на основе их ORM генерирует методы работы с базой - через них можно искать, создавать, изменять, удалять объекты в базе
- forms.py
- содержит forms (формы)
- по декларативному описанию умеют создавать html-формы, а также обрабатывать данные от них на стороне сервера.