如何创建Django应用程序并将其连接到数据库

来自菜鸟教程
跳转至:导航、​搜索

介绍

Django 是一个用 Python 编写的免费开源 Web 框架。 该工具允许可扩展性、可重用性和快速开发。

在本教程中,您将学习如何为连接到 MySQL 数据库的博客网站设置初始基础。 这将涉及使用 django-admin 创建博客 Web 应用程序的骨架结构,创建 MySQL 数据库,并将 Web 应用程序连接到数据库。

Django 将为您提供一个开发环境来处理您的博客 Web 应用程序,但您需要采取更多步骤才能使您的博客在互联网上上线。

先决条件

要完成本教程,您需要:

安装并设置好所有内容后,您可以继续进行第一步。

第 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_schemaMySQLperformance_schemasys。 你不需要接触这些,因为它们包含对 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_HOSTSsettings.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 字典的 ENGINENAME 选项替换为以下行:

~/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
  • NAMEUSERPASSWORDHOSTPORT
  • 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_ZONEALLOWED_HOSTSimport os,以及用于将 Django 应用程序连接到的数据库凭据mysql。 您还调整了防火墙设置以确保测试顺利进行。

现在这些基本设置和配置已完成,您可以开始开发模型并在 Django 应用程序中应用迁移。