介绍
Django 是一个用 Python 编写的免费开源 Web 框架。 该工具允许可扩展性、可重用性和快速开发。
在本教程中,您将学习如何为连接到 MySQL 数据库的博客网站设置初始基础。 这将涉及使用 django-admin
创建博客 Web 应用程序的骨架结构,创建 MySQL 数据库,并将 Web 应用程序连接到数据库。
Django 将为您提供一个开发环境来处理您的博客 Web 应用程序,但您需要采取更多步骤才能使您的博客在互联网上上线。
先决条件
要完成本教程,您需要:
- 具有非 root
sudo
启用用户和防火墙的 Ubuntu 20.04 服务器。 按照我们的 Ubuntu 20.04 初始服务器设置指南 。 - 安装 MySQL 作为数据库。 按照我们关于 如何在 Ubuntu 20.04 上安装 MySQL 的教程进行操作。
- 一个 Python 环境设置。 为此,请按照我们关于 如何在 Ubuntu 20.04 服务器上安装 Python 3 和设置编程环境 的教程进行操作。
安装并设置好所有内容后,您可以继续进行第一步。
第 1 步 — 创建数据库
Django 支持许多流行的数据库管理系统,但本指南侧重于将 Django 连接到 MySQL 数据库。 为此,您需要在 MySQL 实例上创建一个数据库,以及一个 MySQL 用户配置文件,Django 可以使用该配置文件连接到数据库。
要进行此设置,请使用以下命令以 root MySQL 用户身份连接到您的 MySQL 数据库:
sudo mysql
当提示更改时,您将知道您在 MySQL 服务器中:
使用以下命令检查当前数据库:
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 中创建数据库,请运行以下命令,并为您的数据库使用有意义的名称:
CREATE DATABASE blog_data;
成功创建数据库后,您将收到以下输出:
OutputQuery OK, 1 row affected (0.00 sec)
注意: 您可能会收到以下错误:
OutputERROR 1007 (HY000): Can't create database blog_data; database exists
这表明名为 blog_data
的数据库已经存在。
如果您收到以下 MySQL 错误,则表示存在 MySQL 语法错误。 验证您输入的命令是否与本教程中显示的完全一致:
OutputERROR 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 用户帐户,Django 将使用该帐户来操作新数据库。 创建特定的数据库和帐户可以从管理和安全的角度为您提供支持。 我们将在本指南中使用名称 djangouser,但您可以随意使用与您相关的任何名称。
您将创建此帐户、设置密码并授予对您创建的数据库的访问权限。 首先,通过键入以下命令创建用户并设置其密码。 请记住为您的数据库选择一个强密码来替换此示例中的 password
:
CREATE USER 'djangouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
让数据库知道 djangouser 应该可以完全访问您设置的数据库:
GRANT ALL ON blog_data.* TO 'djangouser'@'localhost';
您现在有一个数据库和用户帐户,每个都是专门为 Django 制作的。 刷新权限,以便 MySQL 的当前实例知道您最近所做的更改:
FLUSH PRIVILEGES;
完成后,您可以通过键入 EXIT;
或按 CTRL + D
退出 MySQL 服务器。
第 2 步 — 创建 MySQL 选项文件
您可以将它们存储在 选项文件 中,而不是在 Django 配置文件中指定 MySQL 连接详细信息。 许多 MySQL 程序可以读取选项文件(也称为配置文件)以获取启动选项或连接详细信息等信息。 这很方便,因为您只需将数据库登录凭据存储在一个地方。
使用您喜欢的文本编辑器打开 my.cnf
配置文件以更新您的 MySQL 凭据。 这里我们将使用 nano
:
sudo nano /etc/mysql/my.cnf
添加以下行并包含您的相关信息:
/etc/mysql/my.cnf
… [client] database = blog_data user = djangouser password = your_actual_password default-character-set = utf8
你会注意到 utf8
被设置为默认编码,这是在 MySQL 中编码 unicode 数据的常用方法。 当您确定您的详细信息正确时,保存并关闭文件。 如果您使用 nano
编辑文件,您可以按 CTRL + X
然后按 Y
确认更改。
编辑文件后,您需要重新启动 MySQL 以使更改生效:
sudo systemctl daemon-reload sudo systemctl restart mysql
请注意,重启 MySQL 需要几秒钟,所以请耐心等待。
第 3 步 - 创建初始 Django 项目骨架
在这一步中,您将通过使用 django-admin
命令生成项目骨架来为您的应用程序奠定基础。
导航到您要构建博客应用程序的目录。 在该目录中,创建一个特定目录来构建应用程序。 将目录命名为对您正在构建的应用程序有意义的内容。 例如,我们将命名为 my_blog_app
:
mkdir my_blog_app
现在,导航到新创建的目录:
cd my_blog_app
接下来,进入您想用于在 Django 中工作的编程环境。 您可以使用现有的,也可以创建一个新的。 我们将调用我们的 env
,但您应该使用对您有意义的名称:
python3 -m venv env
创建完成后,您可以激活它:
. env/bin/activate
如果您还没有这样做,现在将 Django 安装到这个环境中:
pip install django
在 my_blog_app
目录中,通过运行以下命令生成项目:
django-admin startproject blog
通过导航到 blog/
目录来验证它是否工作:
cd blog
然后运行 ls
以验证是否在项目文件夹中创建了必要的文件和目录:
ls
输出将列出 blog
目录和 manage.py
文件:
Outputblog manage.py
现在您已经创建了一个包含博客应用程序初始启动的项目目录,您可以继续下一步。
第 4 步 — 安装 MySQL 数据库连接器
为了在您的项目中使用 MySQL,您需要一个与 Django 兼容的 Python 3 数据库连接器库。 此步骤概述了如何安装一个这样的数据库连接器 mysqlclient
,它是 MySQLdb
的分叉版本。
首先,安装必要的 MySQL 开发头文件和库:
sudo apt install libmysqlclient-dev default-libmysqlclient-dev
接下来,使用 pip
安装 wheel
包。 Wheel 是 Python 中用于安装 Python 包索引中的模块的一种打包格式。 从 Wheel 包安装 Python 程序通常比从源代码构建包更快、更节省资源。 为了安装和使用打包为轮子的程序,您首先需要确保已安装 wheel
包:
pip install wheel
然后继续安装 mysqlclient
:
pip install mysqlclient
您将收到类似于以下内容的输出,验证客户端是否已正确安装:
Output... Successfully installed mysqlclient-2.1.0
您现在已经使用 PyPi mysqlclient
连接器库成功安装了 MySQL 客户端。
第 5 步 - 编辑设置
当您之前运行 django-admin
时,它为 Django 创建了一个名为 settings.py
的配置文件。 您需要更改此文件中的一些默认设置,以使一切正常工作。
要编辑文件,请使用您选择的文本编辑器打开文件的路径:
nano ~/my_blog_app/blog/blog/settings.py
为了让您的博客拥有与您所在地区相关的正确时间,您可以编辑 settings.py
文件,使其使用您当前的时区。 您可以使用此 时区列表 作为参考。 对于我们的示例,我们将使用 America/New_York
时间。
在文件中,导航到文件底部附近的 TIME_ZONE
字段:
~/my_blog_app/blog/blog/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
行,使其设置为您当前的时区。 在此示例中,我们将使用纽约的时区:
~/my_blog_app/blog/blog/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 Web 应用程序获取的文件称为 静态文件 。 这可能包括呈现完整网页所需的任何文件,包括 JavaScript、CSS 和图像。
转到 settings.py
文件的末尾并添加 STATIC_ROOT
:
~/my_blog_app/blog/blog/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 添加到允许的主机列表中。 导航到显示 ALLOWED_HOSTS
的 settings.py
文件的行,它将位于 settings.py
文件的顶部。 在方括号之间添加服务器的 IP 地址,用单引号括起来:
~/my_blog_app/blog/blog/settings.py
... # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = ['your_server_IP_address'] # Application definition ...
接下来,添加为目录提供各种功能的 Python OS 模块。 如果没有此模块,您将在设置管理用户以开始使用 Django 界面时收到错误消息。 为此,您需要导入适用于您各自操作系统的 os
模块。 在 from pathlib import Path
行上方添加 import os
行:
~/my_blog_app/blog/blog/settings.py
... import os from pathlib import Path # Build paths inside the project like this: BASE_DIR / 'subdir'. ...
到目前为止,您已经编辑了 settings.py
文件,以便配置正确的时区。 您还添加了静态文件的路径,将 ip address
设置为应用程序的 ALLOWED_HOST
,并导入 Python OS 模块以帮助您稍后设置管理用户。
添加到文件的最后一个片段是将 Django 博客应用程序连接到 MySQL 的数据库连接凭据。 为此,在文件中找到 DATABASES
字典。 默认情况下,它将如下所示:
~/my_blog_app/blog/blog/settings.py
... # Database # https://docs.djangoproject.com/en/3.2/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } ...
将 DATABASES
字典的 ENGINE
和 NAME
选项替换为以下行:
~/my_blog_app/blog/blog/settings.py
... # Database # https://docs.djangoproject.com/en/3.0/ref/settings/#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 在哪里可以找到相关的连接详细信息以连接到您在步骤 1 中创建的 MySQL 数据库。
请注意,Django 按以下顺序读取数据库连接设置:
OPTIONS
NAME
、USER
、PASSWORD
、HOST
、PORT
- MySQL 选项文件
通过在本例中的 OPTIONS
设置中将 Django 指向您的 MySQL 选项文件,它将优先于任何 NAME
设置,否则如果您要指向它,它将覆盖选项文件OPTIONS
设置之外。
此时,您可以保存并关闭文件。
接下来,通过运行以下命令检查迁移更改:
python manage.py makemigrations
然后,运行 migrate
以确保更改通过:
python manage.py migrate
现在您的更改已迁移,您可以创建一个管理用户以用于 Django 管理界面 。 使用 createsuperuser
命令执行此操作:
python manage.py createsuperuser
系统将提示您输入用户名、电子邮件地址和密码。
完成此信息后,您可以继续调整防火墙设置以进行测试。
第 6 步 — 调整防火墙设置
在测试您的 Django Web 应用程序之前,您必须确保您的防火墙设置已经调整。 首先更改 ufw
设置以允许访问端口 8000
:
sudo ufw allow 8000
检查状态以确保这些权限设置已成功更新:
sudo ufw status
OutputStatus: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 8000 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 8000 (v6) ALLOW Anywhere (v6)
您的防火墙设置现在已正确调整,以允许在下一步中测试您的连接。
第 7 步 — 测试 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). October 25, 2021 - 19:50:58 Django version 3.2.9, using settings 'blog.settings' Starting development server at http://your-server-ip:8000/ Quit the server with CONTROL-C.
注意: 您会注意到输出中有未应用的迁移。 不用担心,这不会影响您的应用程序的初始设置,您可以继续。
按照输出中的说明并按照建议的链接 http://your-server-ip:8000/
查看您的 Web 应用程序并验证它是否正常工作。
如果您的页面与上面的屏幕截图类似,则您的 Django 应用程序正在按预期工作。
完成应用程序测试后,按 CTRL + C
停止 runserver
命令。 这将使您返回到您的编程环境。
当你准备好离开你的 Python 环境时,你可以运行 deactivate
命令:
deactivate
停用您的编程环境将使您回到终端命令提示符。
结论
在本教程中,您创建了 Django 博客的初始基础。 您已安装、配置 MySQL 并将其连接到 Django 后端。 您还向应用程序的 settings.py
文件添加了一些重要信息,例如 TIME_ZONE
、ALLOWED_HOSTS
、import os
,以及用于将 Django 应用程序连接到的数据库凭据mysql。 您还调整了防火墙设置以确保测试顺利进行。
现在这些基本设置和配置已完成,您可以开始开发模型并在 Django 应用程序中应用迁移。