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

介绍

Django是一个用Python编写的免费开源的Web框架。这个工具支持可伸缩性、可重用性和快速开发。

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

Django将为您提供一个开发环境,用于开发您的博客Web应用程序,但在将博客发布到互联网之前,您需要采取更多步骤。

先决条件

要按照本教程,您需要:

一切安装和设置完成后,您可以继续进行第一步。

步骤1 — 创建数据库

Django支持许多流行的数据库管理系统,但本指南侧重于将Django连接到MySQL数据库。为了做到这一点,您需要在MySQL实例上创建一个数据库,以及一个Django可以用来连接到数据库的MySQL用户配置文件。

为此,请使用以下命令连接到您的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_schemaMySQLperformance_schemasys。您不需要触摸这些数据库,因为它们包含对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;

完成后,您可以通过写入EXIT;或按下CTRL + D来退出MySQL服务器。

步骤2 —— 创建 MySQL 选项文件

与在 Django 配置文件中指定 MySQL 连接详细信息不同,您可以将它们存储在一个选项文件中。许多 MySQL 程序可以读取选项文件 —— 也称为配置文件 —— 获取启动选项或连接详细信息等信息。这样做很方便,因为您只需在一个地方存储数据库登录凭据。

使用您喜欢的文本编辑器打开 my.cnf 配置文件以更新 MySQL 凭据。这里我们将使用 nano

  1. 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 + O 保存文件,然后按 CTRL + X 关闭编辑器。

编辑完文件后,重新启动 MySQL 以使更改生效:

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

请注意,重新启动 MySQL 需要几秒钟时间,请耐心等待。

第三步 — 创建初始的 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,您需要一个与Django兼容的Python 3数据库连接器库。此步骤概述了如何安装一个这样的数据库连接器,mysqlclient,它是MySQLdb的一个分支版本。

首先,安装必要的MySQL开发头文件和库:

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

接下来,使用pip安装wheel包。 Wheel是Python中用于从Python包索引安装模块的打包格式。从wheel包安装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时,它会创建一个名为settings.py的Django配置文件。您需要更改此文件中的一些默认设置,以便一切都能正常运行。

要编辑该文件,请使用您选择的文本编辑器打开文件的路径:

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

为了使您的博客具有与您所在地区关联的正确时间,您可以编辑settings.py文件,以便它使用您当前的时区。您可以使用此时区列表作为参考。在我们的示例中,我们将使用America/New_York时间。

在文件中,导航到文件底部附近的TIME_ZONE字段:

~/my_blog_app/blog/blog/settings.py
...

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
...

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_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
...

现在您已经添加了时区和静态文件路径,将您的 IP 添加到允许的主机列表中。导航到 settings.py 文件中标有 ALLOWED_HOSTS 的行,它将位于 settings.py 文件的顶部。在方括号之间添加您服务器的 IP 地址,用单引号括起来:

~/my_blog_app/blog/blog/settings.py
...
ALLOWED_HOSTS = ['your_server_IP_address']
...

接下来,添加 Python 的 OS 模块,该模块提供了各种目录功能。如果没有这个模块,当设置管理用户以开始使用 Django 接口时,您将收到错误提示。为此,您需要导入适用于您所在操作系统的 os 模块。在 from pathlib import Path 行上面添加 import os 行:

~/my_blog_app/blog/blog/settings.py
...
import os
from pathlib import Path
...

到目前为止,您已经编辑了 settings.py 文件,以便配置了正确的时区。您还添加了静态文件的路径,将您的 ip 地址 设置为应用程序的 ALLOWED_HOST,并导入了 Python 的 OS 模块,以帮助稍后设置您的管理用户。

要添加到文件的最后一部分代码是数据库连接凭据,以将您的 Django 博客应用程序连接到 MySQL。为此,请查找文件中的 DATABASES 字典。默认情况下,它看起来像以下内容:

~/my_blog_app/blog/blog/settings.py
…

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

DATABASES 字典的 ENGINENAME 选项替换为以下行:

~/my_blog_app/blog/blog/settings.py
...

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 数据库。

请注意,Django 以以下顺序读取数据库连接设置:

  • OPTIONS
  • NAMEUSERPASSWORDHOSTPORT
  • MySQL 选项文件

通过在示例中的 OPTIONS 设置中将 Django 指向您的 MySQL 选项文件,它将优先于任何 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/,查看您的 Web 应用程序,并验证其是否正常工作。

如果您的页面看起来与上面的截图类似,则您的 Django 应用程序运行正常。

测试应用程序完成后,按下CTRL + C停止runserver命令。这将返回您到编程环境。

当您准备好离开 Python 环境时,您可以运行deactivate命令:

  1. deactivate

退出编程环境将使您返回到终端命令提示符。

结论

在本教程中,您创建了 Django 博客的初始基础。您已经安装、配置并将 MySQL 连接到 Django 后端。您还在应用程序的settings.py文件中添加了一些重要信息,例如TIME_ZONEALLOWED_HOSTSimport os 和数据库凭据,以将 Django 应用程序连接到 MySQL。您还调整了防火墙设置,以确保测试顺利进行。

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

Source:
https://www.digitalocean.com/community/tutorials/how-to-create-a-django-app-and-connect-it-to-a-database