介绍
Django是一个免费和开源的网页框架,用Python编写。这个工具允许可扩展性,可重复使用性和快速开发。
在本教程中,您将学习如何设置与MySQL数据库连接的博客网站的初始基础,这将包括使用django-admin创建博客Web应用程序的骨骼结构,创建MySQL数据库,并将Web应用程序连接到数据库。
Django将为您提供一个开发环境,以便在您的博客 Web 应用程序上工作,但您需要在您的博客在线之前采取更多步骤。
前提条件
要遵循本教程,您将需要:
- Ubuntu 22.04服务器,设有一个非 root** `sudo'用户和一个防火墙。 遵循我们的Ubuntu 22.04初始服务器设置指南设置.
- 为用作数据库而安装的MySQL。 您可以在 [如何在 Ubuntu 22.04 上安装 MySQL] (https://andsky.com/tech/tutorials/how-to-install-mysql-on-ubuntu-22-04 ) 上遵循我们的教程设置此功能 。
- Python环境设置。 为此,请遵循我们关于
如何在 Ubuntu 22.04 上安装 Python 3 并设置编程环境
的教程
一旦一切都安装和设置,你可以继续到第一步。
第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]
2…
3
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]
2…
3
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
字典中的ENGINE
和NAME
选项替换为以下几行:
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 应用程序将按预期工作。
当您完成测试应用程序时,请按CTRL + C
来停止运行服务器
命令。
当你准备离开你的Python环境时,你可以运行禁用
命令:
1deactivate
停用您的编程环境将使您回到终端命令提示。
结论
在本教程中,您创建了 Django 博客的初始基础,您已安装、配置并连接 MySQL 到 Django 后端,您还将一些重要的信息添加到您的应用程序的 settings.py
文件中,例如 TIME_ZONE
、 ALLOWED_HOSTS
、 import os
和数据库凭证,以便将您的 Django 应用程序连接到 MySQL。
现在,这些基本设置和配置已经完成,您可以开始在 Django 应用程序中开发模型和应用迁移。