Создание приложения Django и подключение к базе данных
Python, Ubuntu | Комментировать запись
Django – это свободный и открытый веб-фреймворк Python, который поддерживает масштабируемость, повторное использование и быструю разработку кода.
В данном мануале вы узнаете, как создать основу для блога и подключить его к базе данных MySQL. Для этого нужно создать «скелет» веб-приложения с помощью django-admin, затем создать БД MySQL и подключить веб-приложение к базе данных.
Требования
- Сервер Ubuntu 16.04, настроенный согласно этому руководству.
- Предварительно установленный фреймворк Django (инструкции по установке и настройке среды разработки вы найдете здесь).
- MySQL (установить эту СУБД вам поможет мануал Установка последней версии MySQL в Ubuntu 16.04).
1: Создание каркаса проекта Django
Чтобы заложить основу приложения, нужно сгенерировать скелет проекта, используя команду django-admin. Этот каркас станет основой приложения для блога.
Перейдите в домашний каталог:
cd ~
Просмотрите его содержимое:
ls
Если вы выполнили руководство по установке Django, вы увидите такой каталог:
test_django_app
Это скелет проекта, который был сгенерирован для проверки установки.
Этот каталог вам не подойдет. Создайте новый каталог для приложения блога. Выберите для него описательное имя; в руководстве используется my_blog_app.
mkdir my_blog_app
Перейдите в новый каталог:
cd my_blog_app
Чтобы сгенерировать проект, запустите команду:
django-admin startproject blog
Чтобы убедиться, что все выполнено правильно, попробуйте перейти в каталог blog/:
cd blog
Каталог blog/ должен появиться в текущем каталоге ~/my_blog_app/ после запуска команды django-admin.
Запустите ls, чтобы убедиться, что все необходимые элементы были созданы. Должен быть каталог blog и файл manage.py:
blog manage.py
2: Настройка проекта
Сгенерировав проект, вы создали файл settings.py.
Чтобы блог использовал правильное время, связанное с вашим часовым поясом, отредактируйте файл settings.py. Этот список часовых поясов может вам помочь. В данном примере используется пояс America/New_York.
Откройте каталог, в котором находится нужный файл:
cd ~/my_blog_app/blog/blog/
Откройте файл settings.py:
nano settings.py
Найдите поле TIME_ZONE:
...
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
...
Измените часовой пояс:
...
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'America/New_York'
USE_I18N = True
...
Не закрывайте файл – далее нужно будет добавить путь к статическим файлам. Файлы, которые обслуживаются веб-приложением Django, называются статическими файлами. К ним относятся любые файлы для отображения веб-страницы, включая JavaScript, CSS и изображения.
Перейдите в конец settings.py и найдите STATIC_ROOT.
...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Теперь, когда часовой пояс и путь для статических файлов указаны правильно, нужно добавить ваш IP-адрес в список разрешенных хостов. Перейдите к строке ALLOWED_HOSTS, которая находится в верхней части файла settings.py.
...
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = ['your server IP address']
# Application definition
...
Добавьте в скобки свой IP-адрес, взяв его в одинарные кавычки.
Теперь сохраните и закройте файл.
3: Установка соединения с базой данных MySQL
Чтобы использовать MySQL в проекте, понадобится соединительная библиотека Python 3, совместимая с Django. Установите соединитель баз данных mysqlclient, который является форком MySQLdb.
Согласно документации mysqlclient, «MySQLdb – это поточно-совместимый интерфейс к популярному серверу базы данных MySQL, который предоставляет API баз данных Python». Основное преимущество заключается в том, что mysqlclient поддерживает Python 3.
Для начала установите python3-dev.
sudo apt-get install python3-dev
Затем установите заголовки и библиотеки Python и MySQL.
sudo apt-get install python3-dev libmysqlclient-dev
Когда увидите такое сообщение:
After this operation, 11.9 MB of additional disk space will be used.
Do you want to continue? [Y/n]
Нажмите y и ENTER, чтобы продолжить.
С помощью pip3 установите библиотеку mysqlclient из PyPi:
sudo pip3 install mysqlclient
Команда выведет на экран следующее:
successfully installed mysqlclient
Collecting mysqlclient
Downloading mysqlclient-1.3.10.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.10
4: Создание базы данных
На данный момент у вас есть каркас приложения и соединитель mysqlclient. Теперь можно настроить бэкэнд Django для поддержки MySQL.
Сначала инициируйте сервис MySQL:
systemctl status mysql.service
starting mysql.service
mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2017-08-19 11:59:33 UTC; 1min 44s ago
Main PID: 26525 (mysqld)
CGroup: /system.slice/mysql.service
└─26525 /usr/sbin/mysqld
Теперь вы можете войти в MySQL с помощью учетных данных, используя следующую команду. Флаг -u позволяет указать пользователя, а -p включает запрос пароля MySQL:
mysql -u db_user -p
Примечание: Вместо db_user укажите имя вашего пользователя базы данных.
Когда появится строка:
Enter password:
Укажите пароль своего пользователя БД. После этого на экране появится:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.19-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;
Команда выведет имена всех БД, которые существуют на данный момент:
+-------------------+
| Database |
+-------------------+
| information_schema|
| mysql |
| performance_schema|
| sys |
+-------------------+
4 rows in set (0.00 sec)
Примечание: Если при попытке подключиться вы получили ошибку, убедитесь, что правильно ввели пароль и установили MySQL. Также можно проконсультироваться с руководством по установке и настройке MySQL.
По умолчанию в MySQL есть 4 БД: information_schema, MySQL, performance_schema и sys. Не трогайте их – они содержат важную для сервера MySQL информацию.
Теперь создайте исходную базу данных, в которой будут храниться данные блога.
Для этого запустите эту команду, указав описательное имя для новой БД.
CREATE DATABASE blog_data;
После успешного создания базы данных вы увидите следующий результат:
Query OK, 1 row affected (0.00 sec)
Примечание: Если вы видите на экране такой вывод:
database creation failed
ERROR 1007 (HY000): Can't create database blog_data; database exists
значит, БД с таким именем уже существует. Если же вы видите следующую ошибку MySQL:
database creation failed
ERROR 1064 (42000): You have an error in your SQL syntax;
это означает, что в команде допущена синтаксическая ошибка. Убедитесь, что вы ввели команду точно так, как показано выше.
Снова просмотрите список доступных БД:
SHOW DATABASES;
В списке должна появиться новая БД blog_data:
+——————-+
| Database |
+——————-+
| information_schema|
| blog_data |
| MySQL |
| performance_schema|
| sys |
+——————-+
5 rows in set (0.00 sec)
База данных для блога полностью готова.
Чтобы выйти из MySQL, нажмите CTRL + D.
5: Настройка соединения базы данных MySQL и приложения
Теперь нужно добавить учетные данные БД в настройки приложения Django.
Примечание: Важно помнить, что настройки соединения согласно документации Django используются в следующем порядке:
– опции
– имя, пользователь, пароль, хост, порт
– файлы параметров MySQL.
Внесите все необходимые поправки.
Перейдите в файл settings.py и замените все текущие строки DATABASES следующими строками. Приложение должно знать, как использовать MySQL в качестве базы данных и из какого файла читать учетные данные для подключения к БД:
# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': '/etc/mysql/my.cnf',
},
}
}
...
Затем нужно указать в конфигурационном файле учетные данные MySQL. Откройте файл в nano и добавьте следующую информацию:
sudo nano /etc/mysql/my.cnf
...
[client]
database = db_name
user = db_user
password = db_password
default-character-set = utf8
utf8 устанавливается как шифрование по умолчанию, это обычный способ кодирования данных Unicode в MySQL.
После этого перезапустите MySQL:
systemctl daemon-reload
systemctl restart mysql
Это займет несколько минут.
6: Проверка соединения между приложением и БД MySQL
Теперь нужно убедиться, что приложение Django может подключиться к MySQL. Для этого просто запустите сервер. Если запустить его не получится, значит, соединение не получается создать. В противном случае соединение работает.
Перейдите в следующий каталог:
cd ~/my_blog_app/blog/
Запустите команду:
python3 manage.py runserver your-server-ip:8000
Команда выведет:
Performing 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.
August 19, 2017 - 15:45:39
Django version 1.11.4, using settings 'blog.settings'
Starting development server at http://your-server-ip:8000/
Quit the server with CONTROL-C.
Следуя инструкциям из вывода, перейдите по следующей ссылке:
http://your-server-ip:8000/
чтобы просмотреть веб-приложение и убедиться, что оно работает правильно. Вы должны увидеть страницу:
It worked!
Congratulations on your first Django powered page.
Если такая страница появилась – приложение Django работает правильно!
Tags: Django, MySQL, Ubuntu 16.04