Как сделать сервер на django

Обновлено: 06.07.2024

В этом руководстве мы проведем вас через создание простого приложения для опроса.

Он будет состоять из двух частей:

  • Общедоступный сайт, который позволяет людям просматривать опросы и голосовать в них.
  • Сайт администратора, который позволяет добавлять, изменять и удалять опросы.

Предположим, у вас уже установлен Django . Вы можете узнать, какой Django установлен и какая версия установлена, выполнив следующую команду в приглашении оболочки (обозначено префиксом $):

Это руководство написано для Django 3.2, который поддерживает Python 3.6 и новее. Если версия Django не совпадает, вы можете обратиться к руководству для вашей версии Django, используя переключатель версий в правом нижнем углу этой страницы, или обновить Django до последней версии. Если вы используете старую версию Python, проверьте, какую версию Python можно использовать с Django? чтобы найти совместимую версию Django.

См. Раздел Как установить Django, чтобы узнать, как удалить старые версии Django и установить новую.

Где получить помощь:

Создание проекта ¶

Если вы впервые используете Django, вам придется позаботиться о первоначальной настройке. А именно, вы должны будете автоматически генерировать код , который устанавливает Django проект - набор настроек для экземпляра Django, включая конфигурацию базы данных, параметры Django-специфические и настройки конкретных приложений.

Из командной строки cd в каталог, в котором вы хотите сохранить свой код, затем выполните следующую команду:

Это создаст mysite каталог в вашем текущем каталоге. Если не помогло, см. Проблемы с запуском django-admin .

Вам нужно избегать именования проектов после встроенных компонентов Python или Django. В частности, это означает, что вам следует избегать использования таких имен, как django (которые будут конфликтовать с самим Django) или test (которые конфликтуют со встроенным пакетом Python).

Где должен жить этот код?

Если ваш опыт работы с простым старым PHP (без использования современных фреймворков), вы, вероятно, привыкли помещать код в корень документа веб-сервера (в таком месте, как /var/www ). С Django этого не сделать. Не рекомендуется помещать какой-либо из этого кода Python в корень документа вашего веб-сервера, поскольку это создает риск того, что люди смогут просматривать ваш код через Интернет. Это плохо для безопасности.

Поместите свой код в какой-нибудь каталог вне корня документа, например /home/mycode .

Посмотрим, что startproject создано:

Сервер разработки ¶

Давайте проверим, что ваш проект Django работает. Перейдите во внешний mysite каталог, если вы еще этого не сделали, и выполните следующие команды:

Вы увидите следующий вывод в командной строке:

Пока не обращайте внимания на предупреждение о непримененных миграциях базы данных; мы займемся базой данных в ближайшее время.

Вы запустили сервер разработки Django, легкий веб-сервер, написанный исключительно на Python. Мы включили это в Django, чтобы вы могли быстро разрабатывать вещи, не занимаясь настройкой рабочего сервера, такого как Apache, до тех пор, пока вы не будете готовы к производству.

Пришло время отметить: не используйте этот сервер в чем-либо, напоминающем производственную среду. Он предназначен только для использования во время разработки. (Мы занимаемся созданием веб-фреймворков, а не веб-серверов.)

По умолчанию runserver команда запускает сервер разработки на внутреннем IP-адресе через порт 8000.

Если вы хотите изменить порт сервера, передайте его в качестве аргумента командной строки. Например, эта команда запускает сервер на порту 8080:

Если вы хотите изменить IP-адрес сервера, передайте его вместе с портом. Например, чтобы прослушивать все доступные общедоступные IP-адреса (что полезно, если вы используете Vagrant или хотите продемонстрировать свою работу на других компьютерах в сети), используйте:

0 - это ярлык для 0.0.0.0 . Полную документацию по серверу разработки можно найти в runserver справочнике.

Сервер разработки автоматически перезагружает код Python для каждого запроса по мере необходимости. Вам не нужно перезапускать сервер, чтобы изменения кода вступили в силу. Однако некоторые действия, такие как добавление файлов, не вызывают перезапуск, поэтому в этих случаях вам придется перезапустить сервер.

Создание приложения "Опросы" ¶

Каждое приложение, которое вы пишете в Django, состоит из пакета Python, который следует определенному соглашению. Django поставляется с утилитой, которая автоматически генерирует базовую структуру каталогов приложения, поэтому вы можете сосредоточиться на написании кода, а не на создании каталогов.

Проекты против приложений

В чем разница между проектом и приложением? Приложение - это веб-приложение, которое что-то делает, например, система веб-журналов, база данных общедоступных записей или небольшое приложение для опросов. Проект - это набор конфигураций и приложений для определенного веб-сайта. Проект может содержать несколько приложений. Приложение может быть в нескольких проектах.

Ваши приложения могут жить где угодно на вашем пути Python . В этом руководстве мы создадим наше приложение для опроса в том же каталоге, что и ваш manage.py файл, чтобы его можно было импортировать как собственный модуль верхнего уровня, а не как подмодуль mysite .

Чтобы создать приложение, убедитесь, что вы находитесь в том же каталоге, что manage.py и, и введите эту команду:

Это создаст каталог polls , который выглядит следующим образом:

В этой структуре каталогов будет размещено приложение опроса.

Напишите свой первый взгляд ¶

Напишем первое представление. Откройте файл polls/views.py и поместите в него следующий код Python:

Это самый простой вид из возможных в Django. Чтобы вызвать представление, нам нужно сопоставить его с URL-адресом - и для этого нам понадобится URLconf.

Чтобы создать URLconf в каталоге опросов, создайте файл с именем urls.py . Каталог вашего приложения теперь должен выглядеть так:

В polls/urls.py файл включаем следующий код:

Следующим шагом является указание корневого URLconf на polls.urls модуль. В mysite/urls.py добавьте импорт для django.urls.include и вставьте include() в urlpatterns список, чтобы у вас было:

include() Функция позволяет ссылку других URLconfs. Всякий раз, когда встречается Django include() , он отрезает любую часть URL-адреса, совпадающую до этого момента, и отправляет оставшуюся строку во включенный URLconf для дальнейшей обработки.

Вы всегда должны использовать, include() когда включаете другие шаблоны URL. admin.site.urls единственное исключение из этого.

Теперь вы подключили index представление к URLconf. Убедитесь, что он работает, с помощью следующей команды:

path() Функции передаются четыре аргумента, два необходимо: route и view и два опциональные: kwargs и name . На этом этапе стоит рассмотреть, для чего нужны эти аргументы.

path() аргумент: route ¶

route - строка, содержащая шаблон URL. При обработке запроса Django начинает с первого шаблона urlpatterns и продвигается вниз по списку, сравнивая запрошенный URL с каждым шаблоном, пока не найдет подходящий.

path() аргумент: view ¶

path() аргумент: kwargs ¶

В целевое представление можно передать произвольные аргументы ключевого слова в словаре. Мы не собираемся использовать эту функцию Django в учебнике.

path() аргумент: name ¶

Присвоение имени URL-адресу позволяет однозначно ссылаться на него из любого места в Django, особенно из шаблонов. Эта мощная функция позволяет вам вносить глобальные изменения в шаблоны URL-адресов вашего проекта, касаясь только одного файла.

После того, как доступ к серверу с Ubuntu 16.04 был настроен в одной из предыдущих статей , настало время развернуть на нём всё необходимое для работы сайта, а именно:

  1. 1. Шаг 1 - обновление системы
  2. 2. Шаг 2 - Установка всех необходимых пакетов без установки виртуального окружения
  3. 3. Шаг 3 - Создание базы данных и пользователя базы данных
  4. 4. Шаг 4 - Установка виртуального окружения
  5. 5. Шаг 5 - Установка драйвера PostgreSQL
  6. 6. Шаг 6 - Создание проекта
  7. 7. Шаг 7 - Настройка подключения к базе данных
  8. 8. Шаг 8 - Выполнение миграций базы данных
  9. 9. Шаг 9 - Установка Gunicorn
  10. 10. Шаг 10 - Настройка статических файлов
  11. 11. Шаг 11 - Настройка Nginx
  12. 12. Шаг 12 - Настройка supervisor
  13. 13. Примечание

Шаг 1 - обновление системы

Сделаем обновление существующих пакетов. Мало ли, система имеет устаревшие пакеты.

Шаг 2 - Установка всех необходимых пакетов без установки виртуального окружения

Установим пачкой все необходимые пакеты, которые не будут использоваться через virtualenv, а именно Python 3, PostgreSQL, Nginx.

Pip я в итоге устанавливал отдельно через утилиту easy_install3 , которая идёт в комплекте python3-setuptools , во-первых потому, что тогда ставится последняя версия, а вторых в случае установки через apt-get были ошибки при установке пакетов в virtualenv.

Шаг 3 - Создание базы данных и пользователя базы данных

А теперь создадим базу данных и пользователя, дав расширенные права пользователю postgres через утилиту sudo, который создаётся при установке PostgreSQL.

Выполнив данную команду, мы попадём в консоль PostgreSQL, где и создадим необходимую базу данных и пользователя, от имени которого будет подключаться Django приложение к этой базе данных.

Создадим базу данных:

Далее настройка пользователя проекта. Кодировку он будет использовать UTF8, поскольку данная кодировка используется и Django, а Python файлы рекомендует хардкодить с кодировкой UTF8, особенно, если в них присутствует текст, который будет отображаться на страницах сайта. Также устанавливается уровень изоляции в базе данных. То есть когда будут доступны данные для чтения. В данном случае после подтверждения транзакции в общем случае. Конечно, имеются случаи, когда данные доступны до подтверждения, но это отдельная тема для разговора. А также устанавливается тип временных зон, который для Django по умолчанию UTC.

Далее дадим права доступа к базе данных для этого пользователя:

Ну и выйдем из консоли PostgreSQL.

Если возникнут проблемы с кодировками на сервере, когда сервер будет иметь кодировку LATIN1, а базу данных нужно создать в UTF8, то обратитесь к следующей статье , где эта задача решается.

Шаг 4 - Установка виртуального окружения

Установим и активируем виртуальное окружение:

Шаг 5 - Установка драйвера PostgreSQL

Произведём установку следующей командой

Внутри виртуального окружения необходимо пользоваться командой pip , а не pip3

Шаг 6 - Создание проекта

Перейдём в папку с виртуальным окружением, мы по-прежнему должны находиться в режиме работы в виртуальном окружении. И создадим проект.

Шаг 7 - Настройка подключения к базе данных

А теперь отредактируем конфигурационный файл Django, чтобы он подключался к базе данных PostgreSQL, а не создавал и в дальнейшем подключался к базе данных SQLite.

Для этого найдите в файле следующий кусок кода:

И замените его следующим, с учётом ваших данных для подключения к базе данных:

Шаг 8 - Выполнение миграций базы данных

Django обладает одним очень большим преимуществом - он имеет встроенную админку, что очень облегчает жизнь. Но чтобы она заработала, необходимо выполнить миграцию базы данных, то есть подготовить из моделей данных SQL запросы, которые сформируют структуру базу данных.

А ещё создадим суперпользователя, который будет администратором с максимальными правами доступа к вашему сайту. Выполните следующую команду и следуйте инструкциям.

Шаг 9 - Установка Gunicorn

Можете проверить, что сайт уже работает:

Шаг 10 - Настройка статических файлов

Django по умолчанию отдаёт статические файлы только в Debug режиме, который не используется на боевом сервере. Для боевого сервера все статические файлы из всех проектов собираются в отдельную специальную папку с помощью команды collectstatic , а саму папку необходимо указывать в файл settings.py.

И добавим строку, которая будет указывать, куда собирать статические файлы.

А теперь соберём всю статику в данный каталог:

Шаг 11 - Настройка Nginx

Отредактируем конфигурационный файл Nginx.

Удалим всё его содержимое и замени следующим.

И запустим gunicorn

После этого вы обнаружите, что сайт доступен уже на порту 80.

Шаг 12 - Настройка supervisor

Для того, чтобы сайт был доступен в любое время суток, необходимо настроить supervisor, который висит в памяти как служба и будет следить, чтобы сайта всегда работал.

Для стабильной работы Gunicorn необходимо создать его конфигурационный файл. Он будет располагаться рядом с файлом, который будет запускаемым для нашего web-приложения.

Добавим следующую конфигурационную информацию:

То есть мы указали, к какому порту привязываемся, и какой пользователь запускает процесс. А также количество рабочих процессов. В данном случае их три. Рассчитывается по следующей формуле:

workers = Ncpu + 1

После чего создадим конфигурацию самого supervisor

Пропишем в него следующие настройки

А теперь запустим supervisor. Есть один нюанс при установке supervisor. Он не стартанул в качестве службы после того, как был установлен. Поэтому нужно принудительно добавить его в автозагрузку и запустить вручную, если не хотите перезагружать сервер.

Ну а дальше можно обновлять конфиги, проверять статус приложения сайта и его перезапуска.

При перезагрузке сервера всё будет стартовать автоматически

Примечание

Если вы изменили файлы проекта, то необходимо перезапускать gunicorn. Для этого достаточно активировать виртуальное окружение и воспользоваться командой killall

Supervisor автоматически запустит Gunicorn после этой команды, так что можете не беспокоиться, что сервер ляжет надолго. Не более секундного сбоя.

Для Django рекомендую VDS-сервера хостера Timeweb
.

Рекомендуем хостинг TIMEWEB

Рекомендуем хостинг TIMEWEB

Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Наше развертывание мы разделим на два этапа:

  1. Установка и настройка среды Python и UWSGI.
  2. Настройка веб-сервера NGINX.

Рассмотрим эти процессы по шагам.

Python, Django и UWSGI

Устанавливаем необходимые пакеты:

apt-get install nginx uwsgi python3 uwsgi-plugin-python3 python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools

Устанавливаем пакеты для Python:

pip3 install virtualenv uwsgi django

Создаем директорию для хранения стачичных файлов (css, js, img):

mkdir -p /var/www/my_app/static /var/www/my_app/media

chown www-data.www-data /var/www/my_app/media

chown www-data.www-data /var/www/my_app/static

Копируем наше приложение в папку /var/www/my_app, структура должна получиться примерно такой:

Вносим изменения в конфигурационный файл нашего проекта:

  • ALLOWED_HOSTS — разрешенные доменные имена, на которых должен открываться наш сайт.
  • DATABASES — данные для подключения к базе данных. Подробнее, данная настройка описана ниже.

Запускаем команду для сбора всех статических файлов в нашем проекте (из корня проекта):

[uwsgi]
chdir = var/www/my_app
env = DJANGO_SETTINGS_MODULE=project.settings.production
wsgi-file = my_app/wsgi.py
workers = 1max-requests=5000
plugins=python3
processes = 5
threads = 2
master = true
die-on-term = true
socket = sedova.sock
chmod-socket = 660
vacuum = true
uid = www-data
gui = www-data

  • chdir — указываем директорию нашего проекта.
  • env — конфигурационный файл нашего приложения.
  • wsgi-file — относительный путь до файла wsgi.py нашего приложения.

Перезапускаем сервис uwsgi:

service uwsgi restart

Настройка Nginx

Создаем файл конфигурации для нашего приложения

Содержимое файла должно быть примерно следующим:

server listen 80;
server_tokens off;
server_name my_app my_app.domain.local;

location / include uwsgi_params;
uwsgi_pass unix:///run/uwsgi/app/sedova/socket;
>

location /static/ alias /var/www/my_app/static/;
>

location /media/ alias /var/www/my_app/media/;
>
>

systemctl restart nginx

Подключение к базе данных

Рассмотрим пример настройки подключения к СУБД MariaDB/MySQL. Нам необходимо будет настроить как сам сервер баз данных, так и фреймворк. В инструкции опишем полный процесс, начиная от установки СУБД.

MariaDB

Выполним установку и настройку сервера баз данных. Начнем с установки:

apt-get install mariadb-server

Разрешаем автозапуск СУБД:

systemctl enable mariadb

Зададим пароль для учетной записи mysql-root:

mysqladmin -u root password

Установка и запуск завершены. Перейдем к настройке.

Для Django важно, чтобы кодировка была UTF-8. Откроем конфигурационный файл клиента:

[mysql]
.
default-character-set = utf8

Аналогичную настройку выполняем в следующем файле:

[mysql]
.
default-character-set = utf8

Редактируем файл для настройки сервера:

Задаем значения для опций:

character-set-server = utf8
collation_server = utf8_unicode_ci

Для применения настроек перезапускаем сервис:

systemctl restart mariadb

Подготовка базы данных

Предполагается, что у нас есть база данных, которую мы либо создадим на сервере, либо восстановим из резервной копии.

Не забываем также настроить права доступа на базу.

Установка модуля для Python

Для возможности подключения к базе, мы должны установить клиента mysql на сервер. Для этого выполняем две команды:

apt-get install libmysqlclient-dev

pip3 install mysqlclient

Первая команда установит библиотеки, необходимые для установки mysqlclient через менеджер пакетов Python. Вторая, собственно, и установит клиента.

Настройка подключения

Откроем конфигурационный файл нашего приложения:

DATABASES = 'default': 'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
>
>

Данная настройка прописывается, как правило, по умолчанию и позволяет использовать базу sqlite3. Поменяем ее:

DATABASES = 'default': 'ENGINE': 'django.db.backends.mysql',
'NAME': 'database_name',
'HOST': 'localhost',
'USER': 'db_user',
'PASSWORD': 'db_password',
>
>

* в данном примере:

  • NAME — имя базы данных, к которой мы подключимся.
  • HOST — сервер баз данных.
  • USER — пользователь с привилегиями работы с базой данных.
  • PASSWORD — пароль для пользователя.

Делаем выборку

Для проверки настройки создадим select-запрос с нашей базе. Предположим, к таблице users. Пример кода будет таким:

  1. from django.db import connection
  2. cursor = connection.cursor()
  3. cursor.execute("SELECT * FROM users")
  4. print(cursor.fetchall())

В данном примере мы извлечем все содержимое таблицы users и выведем это на экран.

В ходе урока мы выполним создание проекта на основе фреймворка Джанго. Мы рассмотрим все файлы и папки, что были созданы вместе с проектом, а также запустим локальный сервер и посмотрим на сайт через браузер.

Видеоурок

Установка Django

Поскольку Django является фреймворком языка Python , то сперва необходимо установить сам язык. Для этого необходимо скачать последнюю версию Питона на их официальном сайте и следовать простым инструкциям. Если вы находитесь на Windows, то обязательно отметьте галочкой поле Add Python X.Y to PATH .



Если у вас возникли проблемы с установкой Python, то вы можете посмотреть специальный урок , в котором будет рассказано как установить Python на компьютер.

Для установки Django используйте следующую команду:

Если вы находитесь на Маке или Linux, то к слову pip пропишите цифру 3: pip3 . Если у вас не установлен pip на компьютере, то скачайте его по этой ссылке .

Создание проекта

Django проект можно создать в любой папке, поэтому создайте какую-либо папку и откройте её в окне команд. На Windows это можно сделать нажатием правой клавиши мыши на папку при зажатой клавише Shift:



В командной строке пропишите команду:

Запуск локального сервера

Для запуска сервера необходимо перейти в командную строку и открыть в ней папку с вашим проектом. На Windows это можно сделать нажатием правой клавиши мыши на папку при зажатой клавише Shift :



  • Пропишите слово python3 в случае если вы на маке или Linux;
  • Если вы на Windows и у вас всего одна версия Питона, то пишите слово python;
  • Если вы на Windows и у вас несколько версий Python, то либо удалите все версии, кроме последней, либо укажите путь к последней версии Питона.

Несколько полезных советов

  1. В данном курсе используется версия Django 3 , поэтому чтобы не возникали дополнительные непонятные моменты, то лучше установите такую же версию Django;
  2. Стандартная командная строка в Windows не особо удобная, поэтому вместо неё лучше использовать сторонние программы. Очень удобной и легкой в работе является программа PowerShell, которую вы можете скачать здесь ;
  3. Путь к интерпретатору можно не прописывать вручную, если поставить virtualenv и в нём указать нужную версию Python и Django. Если работать в PyCharm, то в преднастройках можно выставить нужный интерпретатор.

Материалы для курса

Чтобы скачивать материалы к видеокурсам необходимо оформить подписку на сайт

Читайте также: