Поиск по сайту:

Как создать приложение Django и подключить его к базе данных


Введение

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

В этом руководстве вы узнаете, как настроить начальную основу для веб-сайта блога с подключением к базе данных MySQL. Это будет включать в себя создание каркасной структуры веб-приложения блога с помощью django-admin, создание базы данных MySQL и подключение веб-приложения к базе данных.

Django предоставит вам среду разработки для работы над вашим веб-приложением блога, но вам нужно будет предпринять дополнительные шаги, прежде чем ваш блог появится в Интернете.

Предпосылки

Чтобы следовать этому руководству, вам понадобятся:

  • Сервер Ubuntu 22.04 с пользователем без полномочий root с поддержкой sudo и брандмауэром. Следуйте нашему руководству по начальной настройке сервера Ubuntu 22.04, чтобы настроить это.
  • MySQL установлен в качестве базы данных. Вы можете настроить это, следуя нашему руководству по установке MySQL в Ubuntu 22.04.
  • Настроена среда Python. Для этого следуйте нашему руководству «Как установить Python 3 и настроить среду программирования в Ubuntu 22.04». .

Когда все установлено и настроено, можно переходить к первому шагу.

Шаг 1 — Создание базы данных

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

Чтобы настроить это, подключитесь к базе данных MySQL как пользователь root MySQL с помощью следующей команды:

  1. sudo mysql

Вы знаете, что находитесь на сервере MySQL, когда подсказка меняется:

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

  1. SHOW DATABASES;

Ваш вывод будет похож на следующий, если предположить, что вы еще не создали никаких баз данных:

Output
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec)

По умолчанию у вас уже есть 4 базы данных: information_schema, MySQL, performance_schema и sys. Вам не нужно их трогать, так как они содержат информацию, важную для самого сервера MySQL.

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

Чтобы создать базу данных в MySQL, выполните следующую команду, используя значимое имя для вашей базы данных:

  1. CREATE DATABASE blog_data;

После успешного создания базы данных ваш вывод будет следующим:

Output
Query OK, 1 row affected (0.00 sec)

Убедитесь, что база данных теперь указана как одна из доступных баз данных:

  1. SHOW DATABASES;

База данных blog_data теперь должна быть указана среди баз данных, включенных в выходные данные:

Output
+--------------------+ | Database | +--------------------+ | information_schema | | blog_data | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)

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

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

  1. CREATE USER 'djangouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Сообщите базе данных, что djangouser должен иметь полный доступ к базе данных, которую вы настроили:

  1. GRANT ALL ON blog_data.* TO 'djangouser'@'localhost';

Теперь у вас есть база данных и учетная запись пользователя, каждая из которых создана специально для Django. Сбросьте привилегии, чтобы текущий экземпляр MySQL знал о последних сделанных вами изменениях:

  1. FLUSH PRIVILEGES;

После этого вы можете выйти из сервера MySQL, написав EXIT; или нажав CTRL + D.

Шаг 2 — Создание файла параметров MySQL

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

Откройте файл конфигурации my.cnf в предпочитаемом вами текстовом редакторе, чтобы обновить учетные данные MySQL. Здесь мы будем использовать nano:

  1. sudo nano /etc/mysql/my.cnf

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

…

[client]
database = blog_data
user = djangouser
password = your_actual_password
default-character-set = utf8

Обратите внимание, что в качестве кодировки по умолчанию используется utf8. Это распространенный способ кодирования данных Unicode в MySQL. Когда вы убедитесь, что ваши данные верны, сохраните и закройте файл. Если вы использовали nano для редактирования файла, вы можете сделать это, нажав CTRL + O, чтобы сохранить файл, а затем CTRL + X, чтобы закрыть редактор.

После редактирования файла перезапустите MySQL, чтобы изменения вступили в силу:

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart mysql

Обратите внимание, что перезапуск MySQL занимает несколько секунд, поэтому наберитесь терпения.

Шаг 3 — Создание начального скелета проекта Django

На этом этапе вы заложите основу для своего приложения, сгенерировав скелет проекта с помощью команды django-admin.

Перейдите в каталог, в котором вы хотите создать приложение для блога. В этом каталоге создайте определенный каталог для сборки приложения. Назовите каталог чем-то значимым для приложения, которое вы создаете. В качестве примера назовем наше приложение my_blog_app:

  1. mkdir my_blog_app

Теперь перейдите во вновь созданный каталог:

  1. cd my_blog_app

Затем перейдите в среду программирования, которую вы хотели бы использовать для работы в Django. Вы можете использовать существующий или создать новый. Следующая команда создает новую среду с именем env, но вы должны использовать понятное вам имя:

  1. python3 -m venv env

После создания вы можете активировать его:

  1. . env/bin/activate

Теперь установите Django в эту среду, если вы еще этого не сделали:

  1. pip install django

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

  1. django-admin startproject blog

Убедитесь, что это работает, перейдя в каталог blog/:

  1. cd blog

Затем запустите ls, чтобы убедиться, что в папке проекта созданы необходимые файлы и каталоги:

  1. ls

В выводе будет указан каталог blog и файл manage.py:

Output
blog manage.py

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

Шаг 4 — Установка соединителя базы данных MySQL

Чтобы использовать MySQL в своем проекте, вам потребуется библиотека коннектора базы данных Python 3, совместимая с Django. Этот шаг описывает, как установить один из таких соединителей базы данных, mysqlclient, который является разветвленной версией MySQLdb.

Сначала установите необходимые заголовки и библиотеки для разработки MySQL:

  1. sudo apt install libmysqlclient-dev default-libmysqlclient-dev

Затем используйте pip для установки пакета wheel. Колесо — это формат упаковки, используемый в Python для установки модулей из индекса пакетов Python. Установка программ Python из пакетов Wheel обычно выполняется быстрее и более эффективно с точки зрения ресурсов, чем сборка пакетов из их исходного кода. Чтобы установить и работать с программами, упакованными как колеса, сначала необходимо убедиться, что пакет wheel установлен:

  1. pip install wheel

Затем продолжите установку mysqlclient:

  1. pip install mysqlclient

Ваш вывод будет похож на следующий, подтверждающий правильность установки клиента:

Output
... Successfully installed mysqlclient-2.1.1

Теперь вы успешно установили клиент MySQL с помощью библиотеки коннекторов PyPi mysqlclient.

Шаг 5 — Редактирование настроек

Когда вы ранее запускали django-admin, он создавал файл конфигурации для Django с именем settings.py. Вам нужно изменить несколько настроек по умолчанию в этом файле, чтобы все работало правильно.

Чтобы отредактировать файл, откройте путь к файлу в любом текстовом редакторе:

  1. nano ~/my_blog_app/blog/blog/settings.py

Чтобы в вашем блоге было правильное время, связанное с вашим регионом, вы можете отредактировать файл settings.py, чтобы он использовал ваш текущий часовой пояс. Вы можете использовать этот список часовых поясов в качестве справки. В нашем примере мы будем использовать время Америка/Нью-Йорк.

В файле перейдите к полю TIME_ZONE в нижней части файла:

...

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
...

Измените строку TIME_ZONE, чтобы она соответствовала вашему текущему часовому поясу. В этом примере мы будем использовать часовой пояс Нью-Йорка:

...

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/New_York'

USE_I18N = True
...

Держите файл открытым, потому что затем вам нужно добавить путь к вашим статическим файлам. Файлы, которые обслуживаются вашим веб-приложением Django, называются статическими файлами. Сюда могут входить любые файлы, необходимые для отображения всей веб-страницы, включая JavaScript, CSS и изображения.

Перейдите в конец файла settings.py и добавьте STATIC_ROOT:

…

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
...

Теперь, когда вы добавили часовой пояс и путь для статических файлов, добавьте свой IP-адрес в список разрешенных хостов. Перейдите к строке файла settings.py, где указано ALLOWED_HOSTS, она будет ближе к началу файла settings.py. Добавьте IP-адрес вашего сервера, заключенный в одинарные кавычки, между квадратными скобками:

...
ALLOWED_HOSTS = ['your_server_IP_address']
...

Затем добавьте модуль ОС Python, который предоставляет различные функции для каталогов. Без этого модуля вы получите сообщение об ошибке при настройке администратора для начала использования интерфейса Django. Для этого вам необходимо импортировать модуль os, который будет работать в вашей соответствующей операционной системе. Добавьте строку import os над строкой from pathlib import Path:

...
import os
from pathlib import Path
...

Итак, вы отредактировали файл settings.py, настроив правильный часовой пояс. Вы также добавили путь к своим статическим файлам, установили свой ip-адрес как ALLOWED_HOST для своего приложения и импортировали модуль ОС Python, чтобы помочь вашему администратору настроить позже.

Последний фрагмент, который нужно добавить в ваш файл, — это учетные данные для подключения к базе данных для подключения вашего блог-приложения Django к MySQL. Для этого найдите в файле словарь DATABASES. По умолчанию это будет выглядеть следующим образом:

…

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

Замените параметры ENGINE и NAME словаря DATABASES следующими строками:

...

DATABASES = {
	'default': {
    	'ENGINE': 'django.db.backends.mysql',
    	'OPTIONS': {
        	'read_default_file': '/etc/mysql/my.cnf',
    	},
	}
}
...

Строка ENGINE: django.db.backends.mysql указывает Django использовать встроенную базу данных MySQL. Параметр read_default_file указывает на /etc/mysql/my.cnf, файл параметров MySQL, который вы редактировали ранее. Это сообщает Django, где он может найти соответствующие детали подключения для подключения к базе данных MySQL, которую вы создали на шаге 1.

Обратите внимание, что Django считывает параметры подключения к базе данных в следующем порядке:

  • ВАРИАНТЫ
  • ИМЯ, ПОЛЬЗОВАТЕЛЬ, ПАРОЛЬ, ХОСТ, ПОРТ
  • Файлы опций MySQL

Указав Django на ваш файл параметров MySQL в параметре OPTIONS, как в этом примере, он будет иметь приоритет над любым параметром NAME, который в противном случае переопределит файл параметров, если вы чтобы указать на него за пределами настройки OPTIONS.

На этом этапе вы можете сохранить и закрыть файл.

Затем проверьте наличие изменений миграции, выполнив следующее:

  1. python manage.py makemigrations

Затем запустите migrate, чтобы убедиться, что изменения прошли:

  1. python manage.py migrate

Теперь, когда ваши изменения были перенесены, вы можете создать пользователя с правами администратора для использования в административном интерфейсе Django. Сделайте это с помощью команды createsuperuser:

  1. python manage.py createsuperuser

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

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

Шаг 6 — Настройка параметров брандмауэра

Перед тестированием вашего веб-приложения Django вы должны убедиться, что настройки вашего брандмауэра были изменены. Начните с изменения настроек ufw, чтобы разрешить доступ к порту 8000:

  1. sudo ufw allow 8000

Проверьте статус, чтобы убедиться, что эти настройки разрешений были успешно обновлены:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 8000 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 8000 (v6) ALLOW Anywhere (v6)

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

Шаг 7 — Тестирование подключения MySQL к приложению

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

Сначала перейдите в следующий каталог:

  1. cd ~/my_blog_app/blog/

Оттуда выполните следующую команду:

  1. python manage.py runserver your-server-ip:8000

Вы получите вывод, аналогичный следующему:

Output
Performing system checks... System check identified no issues (0 silenced). July 19, 2022 - 13:26:08 Django version 4.0.6, using settings 'blog.settings' Starting development server at http://your-server-ip:8000/ Quit the server with CONTROL-C.

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

Следуйте инструкциям в выходных данных и перейдите по предложенной ссылке http://your-server-ip:8000/, чтобы просмотреть свое веб-приложение и убедиться, что оно работает. правильно.

Если ваша страница выглядит так, как показано на снимке экрана выше, ваше приложение Django работает должным образом.

Когда вы закончите тестирование своего приложения, нажмите CTRL + C, чтобы остановить команду runserver. Это вернет вас в среду программирования.

Когда вы будете готовы покинуть среду Python, вы можете запустить команду deactivate:

  1. deactivate

Деактивация вашей среды программирования вернет вас в командную строку терминала.

Заключение

В этом руководстве вы создали начальную основу для своего блога Django. Вы установили, настроили и подключили MySQL к серверной части Django. Вы также добавили важную информацию в файл settings.py вашего приложения, такую как TIME_ZONE, ALLOWED_HOSTS, import os и учетные данные базы данных для подключения вашего приложения Django к MySQL. Вы также настроили параметры брандмауэра, чтобы тестирование прошло гладко.

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