Перевод документации Django, с некоторыми изменениями и дополнениями.
Часть информации так же рассмотрена в цикле переводов Django Book – русский перевод, который, однако, пока не завершён.
В этом цикле статей мы рассмотрим создание обычного приложения с опросами.
Приложение будет состоять из двух частей:
- общедоступная часть, которая позволит посетителям сайта голосовать и смотреть результаты голосований;
- панель администратора, которая позволяет добавлять, изменять и удалять опросы.
Предполагается – что Django уже установлен. Что бы убедиться в этом – вы можете выполнить такую команду:
$ python -c "import django; print(django.get_version())" 1.8.1
Это руководство написано для Django 1.8 и Python 2.7.
Установка Django на CentOS описана тут:
CentOS: обновление Python до 2.7 и установка Django до 1.8
Django: установка NGINX + uWSGI + Django на CentOS
Содержание
Создание проекта
Если это ваш первый проект на Django – вам необходимо выполнить несколько шагов для его создания. А именно – вам необходимо сгенерировать несколько файлов, которые будут являться ядром вашего проекта – настройки, включая конфигурацию базы данных, настройки для Django и настройки для самого приложения.
Перейдите в директорию, в которой хотите создать проект, например:
$ cd /var/www/django/
И выполните такую команду:
$ django-admin startproject mysite
Вот как будут выглядеть файлы в нём:
$ tree -L 2 mysite/ mysite/ ├── manage.py └── mysite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
Назначение файлов и директорий тут:
- Внешний каталог
mysite
– это корневая директория проекта, просто хранилище для файлов. Для Django её имя не играет роли, и вы можете переименовать её. - Файл
manage.py
– утилита командной строки, которая позволяет вам работать с вашим Django-проектом. Документация по ним доступна на странице django-admin and manage.py. - Вложенный каталог
mysite
– это непосредственно пакет Python с вашим проектом. Его имя – это имя модуля Python, которое вам потребуется при импорте (например –import mysite.urls
). - Файл
mysite/__init__.py
– пустой init-файл, который указывает Python, что это директория модуля. mysite/settings.py
– параметры и настройки для данного проекта Django.mysite/urls.py
– список URL-ов для вашего сайта, подробнее – смотрите в URL dispatcher.mysite/wsgi.py
– точка входа для WSGI-сервера, подробнее смотрите на странице How to deploy with WSGI.
Настройка базы данных
Теперь, откройте для редактирования файл mysite/settings.py
. Это – обычный файл Python с переменными, описывающими настройки Django-проекта.
По умолчанию – в настройках указан сервер баз данных SQLite. Если вы новичок в базах данных, или просто хотите попробовать Django – это для вас лучший выбор, так как поддержка SQLite включёна в Python.
Если вы хотите использовать другой сервер баз данных, например – MySQL/MariaDB – вам необходимо изменить тут несколько параметров.
Для начала – создайте базу данных и пользователя (примечание: так как предполагается использование кириллицы в вопросах и ответах – то создадим в UTF-8):
$ mysql -u root -p Enter password:
MariaDB [(none)]> CREATE DATABASE `django_mysite` CHARACTER SET utf8 COLLATE utf8_general_ci; Query OK, 1 row affected (0.09 sec)
MariaDB [(none)]> GRANT ALL ON django_mysite.* TO 'django_mysite'@'%' IDENTIFIED BY 'p@ssword'; Query OK, 0 rows affected (0.16 sec)
Кроме того – для работы с внешними базами данных – необходимо установить драйвер.
Например – для MySQL/MariaDB его можно установить с помощью PIP:
# pip install MySQL-python
Теперь – измените параметры в файле settings.py
:
- ENGINE – выберите 'django.db.backends.sqlite3', 'django.db.backends.postgresql_psycopg2','django.db.backends.mysql'или'django.db.backends.oracle'. доступны и другие бекенды.
- NAME – имя вашей базы данных. Если вы используете SQLite – это это должен быть полный путь к файлу базы. Значение по умолчанию (
os.path.join(BASE_DIR, 'db.sqlite3'
)) создаст файл базы в директории проекта.
Так же, если вы используете не SQLite – то укажите такие параметры:
USER
– имя пользователя базы данных;PASSWORD
– пароль;HOST
– хост;
Например, для базы, созданной выше, блок DATABASES
будет выглядеть так:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_mysite', 'USER': 'django_mysite', 'PASSWORD': 'p@ssword', 'HOST': 'localhost', } }
Тут же вы можете установить параметр для часового пояса – TIME_ZONE. Полный список доступен тут>>>.
Для Киева это будет:
TIME_ZONE = 'EET'
Так же – обратите внимание на параметр INSTALLED_APPS. Тут указываются имена всех приложений Django, которые будут подключены к вашему Django-проекту.
По умолчанию – Django содержит такие приложения:
- django.contrib.admin – панель управления, которую мы рассмотрим в следующей части;
- django.contrib.auth – система авторизации;
- django.contrib.contenttypes – фреймворк для типов данных;
- django.contrib.sessions – фреймворк для работы с сессиями;
- django.contrib.messages – фреймворк сообщений;
- django.contrib.staticfiles – фреймворк для обслуживания статических файлов.
Некоторые из этих приложений требуют как минимум одной таблицы в базе данных, поэтому – нам необходимо создать их для использования. Что бы сделать это – выполните следующую команду:
$ python manage.py migrate Operations to perform: Synchronize unmigrated apps: staticfiles, messages Apply all migrations: admin, contenttypes, auth, sessions Synchronizing apps without migrations: Creating tables... Running deferred SQL... Installing custom SQL... Running migrations: Rendering model states... DONE Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying sessions.0001_initial... OK
Эта команда проверяет параметр INSTALLED_APPS
и создаёт все необходимые для указанных приложений таблицы:
MariaDB [django_mysite]> show tables; +----------------------------+ | Tables_in_django_mysite | +----------------------------+ | auth_group | | auth_group_permissions | | auth_permission | | auth_user | | auth_user_groups | | auth_user_user_permissions | | django_admin_log | | django_content_type | | django_migrations | | django_session | +----------------------------+ 10 rows in set (0.01 sec)
Сервер разработки
Давайте убедимся, что ваш Django-проект работает. Перейдите в корневой каталог mysite
, если вы ещё не в нём, и выполните:
$ python manage.py runserver Performing system checks... System check identified no issues (0 silenced). May 06, 2015 - 18:10:03 Django version 1.8.1, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
Вы запустили сервер разработки Django, легковесный веб-сервер, написанный на Python. Разработчики приложений на Django могут использовать его, что бы не тратить время на настройку полноценных веб-серверов, таких как Apache HTTP или NGINX + uWSGI, пока вы не будете готовы использовать ваш проект на production-системе.
Теперь – откройте в браузере адрес http://127.0.0.1:8000/ – и вы увидите страницу Welcome to Django.
По умолчанию – runserver запускается на 127.0.0.1
и порту 8000
.
Если вы хотите изменить порт – передайте его аргументом:
$ python manage.py runserver 8080
А что бы изменить IP-адрес – добавьте его перед портом, разделив их двоеточием:
$ python manage.py runserver 0.0.0.0:8000
Полная документация по серверу разработки доступна тут>>>.
Сервер разработки будет сам перезагружаться при каждом изменении кода проекта. Однако, некоторые действия – такие как добавление нового файла, не будут вызывать перезагрузку сервера, и вам придётся сделать это самому.
Продолжение – Django: пример создания приложения – часть 2: создание и работа с database API