Skip to content

Django Documentation (quick facts)

Anton Abramov edited this page Mar 27, 2015 · 5 revisions

Коротко о главном по документации Django 1.7

Глава 1


  • Создание проекта: django-admin.py startproject mysite (Это создаст каталог mysite в текущем каталоге) Рассмотрим созданные файлы:

    • Внешний каталог mysite/ – это просто контейнер для вашего проекта. Его название никак не используется Django, и вы можете переименовать его во что угодно.
    • manage.py: Скрипт, который позволяет вам взаимодействовать с проектом Django.
    • Внутренний каталог mysite/ - это пакет Python вашего проекта. Его название – это название пакета Python, которое вы будете использовать для импорта чего-либо из проекта (например, mysite.urls).
    • mysite/__init__.py: Пустой файл, который указывает Python, что текущий каталог является пакетом Python.
    • mysite/settings.py: Настройки/конфигурация проекта.
    • mysite/urls.py: Конфигурация URL-ов для вашего проекта Django. Это “содержание” всех Django-сайтов.
    • mysite/wsgi.py: Точка входа вашего проекта для WSGI-совместимых веб-серверов.
  • Настройка базы данных: Работаем в mysite/settings.py По умолчанию используется SQLite. Это хороший вариант, если вы новичок в базах данных, или хотите попробовать Djagno. SQLite включен в Python, так что вам не нужно устанавливать что либо еще. Если вы хотите использовать другую базу данных, установите необходимые библиотеки и измените настройки подключения к базе данных в DATABASES 'default':

    • ENGINE – Доступные значения: 'django.db.backends.postgresql_psycopg2', 'django.db.backends.mysql', 'django.db.backends.sqlite3' или 'django.db.backends.oracle'. Также доступны другие бэкэнды.
    • NAME – Название базы данных. Если вы используете SQLite, база данных будет файлом на вашем компьютере; в таком случае NAME должна содержать полный путь, включая название этого файла. Значение по умолчанию, os.path.join(BASE_DIR, 'db.sqlite3'), сохранит файл в каталоге проекта.

Если вы используете не SQLite, необходимо указать `USER, PASSWORD, HOST`. Подробности смотрите в описании настройки `DATABASES`.

В начале файла настроек есть переменная `INSTALLED_APPS`.Она содержит приложения Django, которые используются в проекте. Приложения могут использоваться в различных проектах, вы можете упаковать их и распространять для использования другими пользователями.

По умолчанию, INSTALLED_APPS содержит следующие приложения, все они включены в Django:

  • django.contrib.admin – Интерфейс администратора.
  • django.contrib.auth – Система аутентификации.
  • django.contrib.contenttypes – “content types” фреймворк.
  • django.contrib.sessions – Фреймворк сессии.
  • django.contrib.messages – Фреймворк сообщений.
  • django.contrib.staticfiles – Фреймворк для работы со статическими файлами.

Глава 2


//todo

Глава 3


Философия

Представление – это “тип” страниц вашего приложения, которое является функцией для обработки запроса и использует шаблон для генерации страницы. Например, блог может состоять из следующих представлений:

  • Главная страница – показывает несколько последних записей блога.
  • Страница записи – страница отображения одной записи блога.
  • Страница-архив записей по годам – показывает все месяца года и записи блога, сгруппированные по этим месяцам.
  • Страница-архив записей по месяцам – показывает все дни месяца и записи блога, сгруппированные по этим дням.
  • Страница-архив записей по дням – показывает все записи за указанный день.
  • Форма комментариев – предоставляет возможность добавить комментарий к записи блога.

В Django страницы и остальной контент отдается представлениями. Представление - это просто функция Python (или метод представления-класса). Django выбирает представление, анализируя запрошенный URL(точнее часть URL-а после домена). Все представления находятся в файле polls/views.py.

Представления привязываются к URL-у с помощью URLconf. #Функция url() Она принимает четыре аргумента, два обязательных: regex и view, и два необязательных: kwargs и name.

  • url() argument: regex Django проверяет соответствие запрошенного URL-а с регулярным выражением(первый элемент кортежа), начиная с первого и далее по списку, пока не будет найдено подходящее.

Обратите внимание, что регулярные выражения не обрабатывают GET и POST параметры или название домена. Например, при запросе к http://www.example.com/myapp/, URLconf будет обрабатывать myapp/. При запросе к http://www.example.com/myapp/?page=3, URLconf также получит myapp/.

Информацию о регулярных выражениях вы можете найти в Википедии и документации модуля re.

Немного о производительности: регулярные выражения компилируются при первой загрузке модуля URLconf. Они работают очень быстро(если не очень-очень сложные).

  • url() argument: view При нахождении подходящего регулярного выражения, Django вызывает функцию Python передавая: первым аргументом объект HttpRequest, а потом все “распознанные” значения как позиционные или именованные аргументы. Пример такого поведения мы рассмотрим чуть ниже.

  • url() argument: kwargs Любое количество именованных аргументов может быть передано в представление через словарь.

  • url() argument: name Название URL-а позволяет однозначно указать на него в любом месте в Django, особенно полезно это в шаблонах. Это позволяет глобально изменять шаблоны URL-ов в одном месте.

Каждое представление должно выполнить одно из двух действий: вернуть экземпляр HttpResponse с содержимым страницы, или вызвать исключения такое как Http404. Все остальное на ваше усмотрение.

Ваше представление может обращаться к базе данных или нет. Может использовать систему шаблонов Django – или любую другую – или не использовать. Может генерировать PDF файл, возвращать XML, создавать ZIP архив “на лету”, все что угодно, используя любые библиотеки Python.

Все что нужно Django – это HttpResponse. Или исключение.

Функция render()

Процесс загрузки шаблона, добавления контекста и возврат объекта HttpResponse, вполне тривиальный. Django предоставляет функцию для всех этих операций. Вот как будет выглядеть наш index():

polls/views.py
from django.shortcuts import render

from polls.models import Question


def index(request):
    latest_question_list = Question.objects.all().order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'polls/index.html', context)

Функция render() первым аргументом принимает объект запроса, также название шаблона и необязательный словарь значений контекста. Возвращает объект HttpResponse содержащий выполненный шаблон с указанным контекстом.

Глава 4


//todo

Глава 5


В главе 5 рассмотрено написание автоматических тестов. Эта часть описания будет расширяться по мере написания тестов. И при необходимости описать методы тестирования нашего приложения.

Глава 6


Изображения, JavaScript и CSS являются статическими файлами приложения. И для их правильного размещения необходимо придерживаться следующей логики:

  • Создаем папку static в каталоге приложения (webadd). В нем будет производиться поиск всех статических файлов аналогично polls/templates/.

  • Внутри каталога static создаем папку с именем приложения (webadd)

  • Внутри папки с приложением (webadd) создаем папку с типом статических файлов, например css.

  • Внутри соответствующей папки создается статический файл, например style.css. Получаем путь до файла: webadd/static/webadd/css/style.css.

  • Подключении файла со статическими данными в представлении происходит следующим образом:

      {% load staticfiles %}
      <link href="{% static 'webapp/css/bootstrap.css' %}" rel="stylesheet">