-
Notifications
You must be signed in to change notification settings - Fork 2
Django Documentation (quick facts)
Коротко о главном по документации Django 1.7
-
Создание проекта:
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')
, сохранит файл в каталоге проекта.
- ENGINE – Доступные значения:
Если вы используете не 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
– Фреймворк для работы со статическими файлами.
//todo
Представление – это “тип” страниц вашего приложения, которое является функцией для обработки запроса и использует шаблон для генерации страницы. Например, блог может состоять из следующих представлений:
- Главная страница – показывает несколько последних записей блога.
- Страница записи – страница отображения одной записи блога.
- Страница-архив записей по годам – показывает все месяца года и записи блога, сгруппированные по этим месяцам.
- Страница-архив записей по месяцам – показывает все дни месяца и записи блога, сгруппированные по этим дням.
- Страница-архив записей по дням – показывает все записи за указанный день.
- Форма комментариев – предоставляет возможность добавить комментарий к записи блога.
В 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. Или исключение.
Процесс загрузки шаблона, добавления контекста и возврат объекта 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 содержащий выполненный шаблон с указанным контекстом.
//todo
В главе 5 рассмотрено написание автоматических тестов. Эта часть описания будет расширяться по мере написания тестов. И при необходимости описать методы тестирования нашего приложения.
Изображения, 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">