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

Вступление

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

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

Предпосылки

Этот учебник является вторым в серииDjango Development. Чтобы следовать этому руководству, вы должны выполнить следующее:

  • Установите необходимое программное обеспечение для использования Django на сервере Ubuntu 16.04. Если вы еще не настроили сервер с правами sudo или еще не установили Django, вы можете следовать первому руководству в этой серии: «https://www.digitalocean.com/community/tutorials/how-to-install». -django-and-set-up-a-development-environment-on-ubuntu-16-04 [Как установить Django и настроить среду разработки в Ubuntu 16.04]. »

  • Установите MySQL перед тем, как продолжить этот урок. Если он у вас еще не установлен, вы можете выполнитьstep 2 of “How To Install the Latest MySQL on Ubuntu 16.04”, который включает команды для установки MySQL.

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

[[step-1 -—- create-the-initial-django-project-скелет]] == Шаг 1. Создайте начальный скелет проекта Django

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

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

cd ~

Далее мы можем перечислить содержимое нашего текущего каталога:

ls

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

Outputdjango-apps

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

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

mkdir my_blog_app

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

cd my_blog_app

Затем создайте и активируйте виртуальную среду Python.

python3 -m venv env
. env/bin/activate

Теперь установите Django:

pip install django

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

django-admin startproject blog

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

cd blog

Каталогblog/ должен был быть создан в текущем каталоге~/my_blog_app/ после выполнения предыдущей командыdjango-admin.

Запуститеls, чтобы убедиться, что необходимые элементы созданы. Должны быть каталогblog и файлmanage.py:

Outputblog manage.py

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

[[step-2 -—- edit-settings]] == Шаг 2 - Изменить настройки

Поскольку мы сгенерировали скелет проекта, теперь у нас есть файлsettings.py.

Чтобы в нашем блоге было правильное время, связанное с нашей областью, мы отредактируем файлsettings.py так, чтобы он использовал ваш текущий часовой пояс. Вы можете использовать этотlist of time zones как ссылку. В нашем примере мы будем использовать времяAmerica/New_York.

Теперь перейдите в каталог, в котором находится файлsettings.py:

cd ~/my_blog_app/blog/blog/

Затем, используя nano или текстовый редактор по вашему выбору, откройте и отредактируйте файлsettings.py:

nano settings.py

Мы редактируем полеTIME_ZONE, поэтому перейдите в нижний раздел файла, который выглядит следующим образом:

settings.py

...
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
...

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

settings.py

...
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/New_York'

USE_I18N = True
...

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

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

settings.py

...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/

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

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

settings.py

...
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['your server IP address']

# Application definition
...

Добавьте IP-адрес вашего сервера в квадратные скобки и одинарные кавычки.

Если вас устраивают внесенные вами изменения, сохраните файл, нажавCTRL +X, а затемy, чтобы подтвердить изменения.

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

На этом этапе мы можем перейти к настройке подключения к нашей базе данных.

[[шаг-3 -—- install-mysql-database-connector]] == Шаг 3. Установите коннектор базы данных MySQL.

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

Согласно документацииmysqlclient, «MySQLdb - это поточно-совместимый интерфейс популярного сервера базы данныхMySQL, который предоставляет API базы данных Python». Основное отличие состоит в том, чтоmysqlclient имеет дополнительное преимущество, включающее поддержку Python 3.

Первое, что нам нужно сделать, это установитьpython3-dev. Вы можете установитьpython3-dev, выполнив следующую команду:

sudo apt-get install python3-dev

После установкиpython3-dev мы можем установить необходимые заголовки и библиотеки для разработки Python и MySQL:

sudo apt-get install python3-dev libmysqlclient-dev

Когда вы увидите следующий вывод:

OutputAfter this operation, 11.9 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Введитеy, затем нажмитеENTER, чтобы продолжить.

Затем мы будем использоватьpip3 для установки библиотекиmysqlclient изPyPi. Поскольку наша версияpip указывает наpip3, мы можем просто использоватьpip.

pip install mysqlclient

Вы увидите вывод, похожий на этот, проверив, что он устанавливается правильно:

successfully installed mysqlclientCollecting mysqlclient
  Downloading mysqlclient-1.3.12.tar.gz (82kB)
    100% |████████████████████████████████| 92kB 6.7MB/s
Building wheels for collected packages: mysqlclient
  Running setup.py bdist_wheel for mysqlclient ... done
  Stored in directory: /root/.cache/pip/wheels/32/50/86/c7be3383279812efb2378c7b393567569a8ab1307c75d40c5a
Successfully built mysqlclient
Installing collected packages: mysqlclient
Successfully installed mysqlclient-1.3.12

Теперь установите серверMySQL с помощью следующей команды:

sudo apt-get install mysql-server

Мы успешно установили сервер MySQL и клиент MySQL, используя библиотеку коннектора PyPimysqlclient.

[[step-4 -—- create-the-database]] == Шаг 4. Создайте базу данных

Теперь, когда скелет вашего приложения Django настроен иmysqlclient иmysql-server установлены, нам нужно будет настроить ваш бэкэнд Django для совместимости с MySQL.

Убедитесь, что служба MySQL работает:

systemctl status mysql.service

Вы увидите вывод, который выглядит примерно так:

mysql.service active● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2017-12-29 11:59:33 UTC; 1min 44s ago
 Main PID: 26525 (mysqld)
   CGroup: /system.slice/mysql.service
        └─26525 /usr/sbin/mysqld

Dec 29 11:59:32 ubuntu-512mb-nyc3-create-app-and-mysql systemd[1]: Starting MySQL Community Server...
Dec 29 11:59:33 ubuntu-512mb-nyc3-create-app-and-mysql systemd[1]: Started MySQL Community Server.

Если вместо этого вы видите вывод, похожий на этот:

mysql.service inactive● mysqld.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

Вы можете запуститьsudo systemctl start mysql, чтобы снова запуститьmysql.service.

Теперь вы можете войти с вашими учетными данными MySQL, используя следующую команду. Где-u - это флаг для объявления вашего имени пользователя, а-p - это флаг, который сообщает MySQL, что этому пользователю требуется пароль:

mysql -u db_user -p

Затем вы увидите вывод, который запрашивает парольdb_user’s:

OutputEnter password:

После того, как вы правильно введете свой пароль, вы увидите следующий вывод:

OutputWelcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.20-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

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

SHOW DATABASES;

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

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

[.note] #Note: Если вы получаете сообщение об ошибке при попытке подключения, убедитесь, что ваш пароль правильный и что вы правильно установили MySQL. В противном случае вернитесь кtutorial on how to install and configure MySQL.
#

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

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

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

CREATE DATABASE blog_data;

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

OutputQuery OK, 1 row affected (0.00 sec)

[.Примечание]##

Note: Если вы видите следующий вывод:

database creation failedERROR 1007 (HY000): Can't create database blog_data; database exists

Тогда, как указано в ошибке, база данных с именемblog_data уже существует.

И если вы видите следующую ошибку MySQL, это означает, что есть ошибка синтаксиса MySQL. Убедитесь, что вы ввели команду именно так, как показано в этом руководстве.

database creation failedERROR 1064 (42000): You have an error in your SQL syntax;

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

SHOW DATABASES;

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

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

Вы успешно создали базу данных MySQL для своего блога.

Каждый раз, когда вы хотите выйти из сервера MySQL, нажмитеCTRL +D.

[[step-5 -—- add-the-mysql-database-connection-to-your-application]] == Шаг 5. Добавьте соединение с базой данных MySQL в ваше приложение.

Наконец, мы добавим учетные данные подключения к базе данных в ваше приложение Django.

[.note] #Note: Важно помнить, что настройки подключения, согласно документации Django, используются в следующем порядке:
-OPTIONS
-NAME,USER,PASSWORD,HOST,PORT
-MySQL option files.
#

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

Перейдите к файлуsettings.py и замените текущие строкиDATABASES следующими. Мы настроим ваш словарь базы данных таким образом, чтобы он знал, что MySQL будет использоваться в качестве вашей базы данных и из какого файла будет считываться ваша учетная запись для подключения к базе данных:

settings.py

...
# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases

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

Далее, давайте отредактируем файл конфигурации так, чтобы он имел ваши учетные данные MySQL. Используйте nano какsudo, чтобы отредактировать файл и добавить следующую информацию:

sudo nano /etc/mysql/my.cnf

my.cnf

...
[client]
database = db_name
user = db_user
password = db_password
default-character-set = utf8

Если имя базы данных в нашем случаеblog_data, ваше имя пользователя для сервера MySQL - это созданное вами имя, а пароль - это созданный вами пароль сервера MySQL. Кроме того, вы заметите, чтоutf8 установлен как кодировка по умолчанию, это распространенный способ кодирования данных Unicode в MySQL.

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

systemctl daemon-reload
systemctl restart mysql

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

[[step-6 -—- test-mysql-connection-to-application]] == Шаг 6. Проверка подключения MySQL к приложению.

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

Нам нужно перейти в следующий каталог:

cd ~/my_blog_app/blog/

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

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

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

OutputPerforming system checks...

System check identified no issues (0 silenced).

You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

January 4, 2018 - 15:45:39
Django version 2.0.1, using settings 'blog.settings'
Starting development server at http://your-server-ip:8000/
Quit the server with CONTROL-C.

[.note] #Note: Вы увидите, что у вас есть непримененные миграции на выходе. Но не волнуйтесь, это будет рассмотрено в следующих руководствах. Это не влияет на первоначальную настройку нашего приложения. Продолжайте.
#

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

Django Default Page

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

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

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

deactivate

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

Заключение

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

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

Related