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

介绍

Django是一个免费和开源的网页框架,用Python编写。这个工具允许可扩展性,可重复使用性和快速开发。

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

Django将为您提供一个开发环境,以便在您的博客 Web 应用程序上工作,但您需要在您的博客在线之前采取更多步骤。

前提条件

要遵循本教程,您将需要:

](https://andsky.com/tech/tutorials/how-to-install-python-3-and-set-up-a-programming-environment-on-ubuntu-22-04)

一旦一切都安装和设置,你可以继续到第一步。

第1步:创建数据库

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

要设置此设置,请以以下命令作为 root MySQL 用户连接到您的 MySQL 数据库:

1sudo mysql

你知道你在MySQL服务器,当提示变更时:

使用以下命令检查当前数据库:

1SHOW DATABASES;

您的输出将类似于以下,假设您尚未创建任何数据库:

 1[secondary_label Output]
 2+--------------------+
 3| Database       	|
 4+--------------------+
 5| information_schema |
 6| mysql         	|
 7| performance_schema |
 8| sys            	|
 9+--------------------+
104 rows in set (0.00 sec)

默认情况下,您将有 4 个已创建的数据库:information_schema、MySQL、performance_schema 和 sys. 您不需要触摸这些数据库,因为它们包含 MySQL 服务器本身的重要信息。

相反,创建最初的数据库,它将为您的博客存储数据。

要在 MySQL 中创建数据库,运行以下命令,使用数据库的有意义名称:

1CREATE DATABASE blog_data;

成功创建数据库后,您的输出将如下:

1[secondary_label Output]
2Query OK, 1 row affected (0.00 sec)

检查数据库是否现在列为可用的数据库之一:

1SHOW DATABASES;

blog_data数据库现在应该列入输出中包含的数据库中:

 1[secondary_label Output]
 2+--------------------+
 3| Database       	|
 4+--------------------+
 5| information_schema |
 6| blog_data      	|
 7| mysql             	|
 8| performance_schema |
 9| sys            	|
10+--------------------+
115 rows in set (0.00 sec)

接下来,创建一个单独的MySQL用户帐户,Django将使用它来运行新的数据库。创建特定的数据库和帐户可以从管理和安全的角度支持您。我们将在本指南中使用名称 djangouser

您将创建此帐户,设置密码,并授予您创建的数据库访问权限. 首先,创建用户并通过键入以下命令设置他们的密码。

1CREATE USER 'djangouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

让数据库知道 djangouser 应该可以完全访问您设置的数据库:

1GRANT ALL ON blog_data.* TO 'djangouser'@'localhost';

现在你有一个数据库和用户帐户,每个帐户都是专门为Django创建的。

1FLUSH PRIVILEGES;

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

第2步:创建一个MySQL选项文件

而不是在 Django 配置文件中指定您的 MySQL 连接细节,您可以将它们存储在 option file中。许多 MySQL 程序可以读取选项文件 - 也称为配置文件 - 以获取启动选项或连接细节等信息。

使用您喜爱的文本编辑器打开my.cnf配置文件以更新您的MySQL凭据。

1sudo nano /etc/mysql/my.cnf

添加以下行,并包含您的相关信息:

1[label /etc/mysql/my.cnf]
23
4[client]
5database = blog_data
6user = djangouser
7password = your_actual_password
8default-character-set = utf8

请注意,utf8设置为默认编码,这是在MySQL中编码单码数据的一种常见方式,当您确定您的详细信息是正确的时,请保存并关闭文件。

一旦文件已被编辑,重新启动MySQL,以便更改生效:

1sudo systemctl daemon-reload
2sudo systemctl restart mysql

请注意,重新启动 MySQL 需要几秒钟,所以请耐心。

第3步:创建初始的Django项目骨骼

在此步骤中,您将通过使用django-admin命令生成项目骨骼来为您的应用程序奠定基础。

在该目录中,创建一个特定的目录来构建该应用程序. 称呼目录为您正在构建的应用程序有意义的东西。

1mkdir my_blog_app

现在,导航到新创建的目录:

1cd my_blog_app

接下来,进入你想在Django中使用的编程环境,你可以使用现有的环境,或者创建新的环境,下面的命令会创建一个名为env的新环境,但你应该使用一个对你有意义的名字:

1python3 -m venv env

一旦创建,你可以激活它:

1. env/bin/activate

现在,如果您还没有在这个环境中安装Django:

1pip install django

my_blog_app目录中,通过运行以下命令生成一个项目:

1django-admin startproject blog

通过导航到blog/目录来验证它是否起作用:

1cd blog

然后运行ls来验证在项目文件夹中创建了必要的文件和目录:

1ls

输出将列出博客目录和manage.py文件:

1[secondary_label Output]
2blog manage.py

现在你已经创建了一个包含博客应用程序的初始启动的项目目录,你可以继续到下一步。

第4步:安装MySQL数据库连接器

为了在您的项目中使用MySQL,您需要一个与Django兼容的Python 3数据库连接器库,此步骤概述了如何安装一个这样的数据库连接器,即mysqlclient,这是一个MySQLdb的折叠版本。

首先,安装必要的 MySQL 开发标题和库:

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

接下来,使用pip来安装包。 Wheel 是 Python 使用的包装格式,用于安装 Python Package Index 中的模块。从轮包中安装 Python 程序通常比从源代码中构建包装更快、更节省资源。

1pip install wheel

然后继续安装mysqlclient:

1pip install mysqlclient

您的输出将类似于以下,检查客户端是否正确安装:

1[secondary_label Output]
2...
3Successfully installed mysqlclient-2.1.1

您现在已经成功安装了MySQL客户端,使用PyPimysqlclient连接器库。

步骤5:编辑设置

當你之前執行「django-admin」時,它為 Django 創建了一個名為「settings.py」的配置檔案,您需要更改此檔案中的一些默認設定,以便讓一切正常工作。

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

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

为了让你的博客有与你的地区相关的正确时间,你可以编辑 settings.py 文件,以便它使用你的当前时区。你可以使用这个 时区列表作为参考。 对于我们的例子,我们将使用 America/New_York 时间。

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

 1[label ~/my_blog_app/blog/blog/settings.py]
 2...
 3
 4LANGUAGE_CODE = 'en-us'
 5
 6TIME_ZONE = 'UTC'
 7
 8USE_I18N = True
 9
10USE_L10N = True
11
12USE_TZ = True
13...

更改TIME_ZONE行,以便它设置为当前时区. 在本示例中,我们将使用纽约的时区:

1[label ~/my_blog_app/blog/blog/settings.py]
2...
3
4LANGUAGE_CODE = 'en-us'
5
6TIME_ZONE = 'America/New_York'
7
8USE_I18N = True
9...

保持文件打开,因为接下来,你需要添加一个路径为你的静态文件.从你的DjangoWeb应用程序中得到服务的文件被称为 static files. 这可能包括任何必要的文件来渲染完整的网页,包括JavaScript,CSS和图像。

进入settings.py文件的末尾,然后添加STATIC_ROOT:

1[label ~/my_blog_app/blog/blog/settings.py]
23
4STATIC_URL = '/static/'
5STATIC_ROOT = os.path.join(BASE_DIR, 'static')
6...

现在你已经添加了时区和静态文件的路径,将你的IP添加到允许主机的列表中。 导航到settings.py文件的行,它说ALLOWED_HOSTS,它将向settings.py文件的顶部。

1[label ~/my_blog_app/blog/blog/settings.py]
2...
3ALLOWED_HOSTS = ['your_server_IP_address']
4...

接下来,添加 Python OS 模块,为目录提供各种功能. 没有这个模块,你会在设置管理用户开始使用 Django 界面时收到错误。 要做到这一点,你需要导入os模块,该模块将在您的操作系统上工作。 添加从 pathlib 导入路径行上面的import os行:

1[label ~/my_blog_app/blog/blog/settings.py]
2...
3import os
4from pathlib import Path
5...

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

最后一个要添加到你的文件是数据库连接凭证来连接你的Django博客应用程序到MySQL。 为此,在文件中找到‘DATABASES’字典。

 1[label ~/my_blog_app/blog/blog/settings.py]
 2 3
 4DATABASES = {
 5    'default': {
 6    	'ENGINE': 'django.db.backends.sqlite3',
 7    	'NAME': BASE_DIR / 'db.sqlite3',
 8    }
 9}
10...

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

 1[label ~/my_blog_app/blog/blog/settings.py]
 2...
 3
 4DATABASES = {
 5    'default': {
 6    	'ENGINE': 'django.db.backends.mysql',
 7    	'OPTIONS': {
 8        	'read_default_file': '/etc/mysql/my.cnf',
 9    	},
10    }
11}
12...

‘ENGINE’:‘django.db.backends.mysql’ 行告诉 Django 使用其内置的 MySQL 数据库后端. read_default_file 选项指向/etc/mysql/my.cnf`,这是您之前编辑的 MySQL 选项文件。

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

  • 选项 * 名称,用户,密码,主机,端口 * MySQL选项文件

通过将Django指向您的MySQL选项文件,如本示例所示的OPTIONS设置中,它将优先于任何NAME设置,否则如果您指向OPTIONS设置以外的选项文件。

此时,您可以保存和关闭文件。

接下来,通过运行以下操作来检查迁移变更:

1python manage.py makemigrations

然后运行迁移,以确保更改通过:

1python manage.py migrate

现在你的更改已经迁移了,你可以创建一个管理用户用于 Django admin interface

1python manage.py createsuperuser

您将被要求为您的用户提供用户名、电子邮件地址和密码。

完成此信息后,您可以继续调整防火墙设置以允许测试。

第6步:调整防火墙设置

在测试您的 Django Web 应用程序之前,您必须确保您的防火墙设置已被调整。开始通过更改您的ufw设置以允许访问端口8000:

1sudo ufw allow 8000

检查状态以确保这些权限设置已成功更新:

1sudo ufw status
1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
6OpenSSH ALLOW Anywhere
78000 ALLOW Anywhere
8OpenSSH (v6)               ALLOW Anywhere (v6)
98000 (v6)                  ALLOW Anywhere (v6)

您的防火墙设置现在已经正确调整,以便在下一步测试您的连接。

第7步:测试 MySQL 连接到应用程序

现在您可以验证 Django 中的配置是否正确检测到您的 MySQL 服务器. 您可以通过运行服务器来做到这一点. 如果它失败,则意味着连接不正常工作。

首先导航到以下目录:

1cd ~/my_blog_app/blog/

从那里,运行以下命令:

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

您将收到类似于以下的输出:

1[secondary_label Output]
2Performing system checks...
3
4System check identified no issues (0 silenced).
5July 19, 2022 - 13:26:08
6Django version 4.0.6, using settings 'blog.settings'
7Starting development server at http://your-server-ip:8000/
8Quit the server with CONTROL-C.

注意:你会注意到你在输出中没有应用迁移,不要担心,这不会影响你的应用程序的初始设置,你可以继续。

遵循输出中的指示,并按照建议的链接, http://your-server-ip:8000/,查看您的Web应用程序并验证它是否正常工作。

Django Default Page

如果您的页面与上面的屏幕截图相似,您的 Django 应用程序将按预期工作。

当您完成测试应用程序时,请按CTRL + C来停止运行服务器命令。

当你准备离开你的Python环境时,你可以运行禁用命令:

1deactivate

停用您的编程环境将使您回到终端命令提示。

结论

在本教程中,您创建了 Django 博客的初始基础,您已安装、配置并连接 MySQL 到 Django 后端,您还将一些重要的信息添加到您的应用程序的 settings.py 文件中,例如 TIME_ZONEALLOWED_HOSTSimport os 和数据库凭证,以便将您的 Django 应用程序连接到 MySQL。

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

Published At
Categories with 技术
comments powered by Disqus