Django: пример создания приложения – часть 1: создание и запуск проекта

Автор: | 10/05/2015
 

django_logo_2Перевод документации 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 содержит такие приложения:

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

$ 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_1

Полная документация по серверу разработки доступна тут>>>.
Сервер разработки будет сам перезагружаться при каждом изменении кода проекта. Однако, некоторые действия – такие как добавление нового файла, не будут вызывать перезагрузку сервера, и вам придётся сделать это самому.

Продолжение – Django: пример создания приложения – часть 2: создание и работа с database API