介绍
Django 是一个用 Python 编写的免费开源 Web 框架,具有可扩展性、可重用性和快速开发。
在本教程中,您将学习如何为连接到 MySQL 数据库的博客网站设置初始基础。这将涉及使用 来django-admin
创建博客 Web 应用程序的骨架结构,创建 MySQL 数据库,然后将 Web 应用程序连接到数据库。
请注意,这将为您提供一个开发环境来处理您的博客网络应用程序,但您需要采取更多步骤才能将您的博客发布到互联网上,并且需要设置域名,并添加额外的安全层。
先决条件
您应该在服务器上设置了 Python 环境。在本教程中,我们将使用 Ubuntu 20.04 服务器,但由于本教程的重点是 Django,因此这些原则应该适用于其他操作系统。
要设置 Python,请按照我们的教程如何在 Ubuntu 20.04 服务器上安装 Python 3 和设置编程环境。
有了 Python,我们可以继续创建我们的应用程序。
第 1 步 – 安装 MySQL
我们将使用 MySQL 作为我们的数据库。您可能希望使用另一个数据库或已经安装了一个数据库,在这种情况下,您应该跳过此步骤。
要将 MySQL 安装到 Ubuntu 20.04 服务器,请键入以下内容:
- sudo apt install mysql-server
您应该会收到以下输出:
Output● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-05-07 20:22:51 UTC; 3min 7s ago
Main PID: 2052 (mysqld)
Status: "Server is operational"
Tasks: 38 (limit: 1137)
Memory: 317.4M
CGroup: /system.slice/mysql.service
└─2052 /usr/sbin/mysqld
确保您收到的反馈表明您的 MySQL 服务器是active
. 一旦这是真的,您可以继续本教程。
步骤 2 — 创建初始 Django 项目骨架
为了为我们的应用程序奠定基础,我们需要使用django-admin
命令生成项目骨架。这个生成的项目将成为我们博客应用程序的基础。
导航到要构建博客应用程序的目录。在该目录中,我们将创建一个特定目录来构建应用程序。将目录称为对您正在构建的应用程序有意义的内容。例如,我们将调用 ours my_blog_app
。
- mkdir my_blog_app
现在,导航到新创建的目录:
- cd my_blog_app
接下来,进入您想用于在 Django 中工作的编程环境。您可以使用现有的,或创建一个新的。我们将称其为 ours env
,但您应该使用对您有意义的名称。创建后,您可以激活它。
- python3 -m venv env
- . env/bin/activate
如果您还没有安装 Django,现在将其安装到这个环境中:
- pip install django
在my_blog_app
目录中,我们将通过运行以下命令生成一个项目:
- django-admin startproject blog
通过导航到blog/
目录来验证它是否有效:
- cd blog
运行上一条命令后blog/
,该目录应该已在当前目录中创建。~/my_blog_app/
django-admin
运行ls
以验证是否创建了必要的项目。应该有一个blog
目录和一个manage.py
文件:
Outputblog manage.py
现在您已经创建了一个包含博客应用程序初始启动的项目目录,我们可以继续下一步。
步骤 3 — 编辑设置
由于我们已经生成了骨架项目,我们现在有了一个settings.py
文件。
为了让我们的博客拥有与我们所在地区相关联的正确时间,我们将编辑该settings.py
文件,使其使用您当前的时区。您可以使用此时区列表作为参考。对于我们的示例,我们将使用America/New_York
时间。
我们想编辑文件,所以让我们用我们选择的文本编辑器打开文件的路径。在这里,我们将使用 nano。
- nano ~/my_blog_app/blog/blog/settings.py
由于我们正在编辑该TIME_ZONE
字段,因此我们将导航到文件的底部部分,类似于下面的内容。
...
# 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
行,使其设置为您当前的时区。在此示例中,我们将使用纽约的时区:
...
# 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
如下所示:
...
# 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 添加到允许的主机列表中。导航到settings.py
文件所在的行ALLOWED_HOSTS
,它将位于settings.py
文件的顶部。
...
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = ['your server IP address']
# Application definition
...
在方括号和单引号之间添加您服务器的 IP 地址。
一旦您对所做的更改感到满意,请保存文件。如果您在 nano 中,您可以通过按CTRL
+X
然后y
确认更改来实现。
您已成功编辑settings.py
文件,以便配置正确的时区。您还增加了路径的静态文件,并设置你ip address
是一个ALLOWED_HOST
为你的应用程序。
最后,让我们创建一个管理用户,以便您可以使用Djano 管理界面。让我们使用以下createsuperuser
命令执行此操作:
- python manage.py createsuperuser
系统将提示您输入用户名、电子邮件地址和用户密码。
此时我们可以继续设置我们的数据库连接。
第 4 步 – 安装 MySQL 数据库连接器
为了在我们的项目中使用 MySQL,我们需要一个与 Django 兼容的 Python 3 数据库连接器库。因此,我们将安装数据库连接器mysqlclient
,它是MySQLdb
.
首先确保您已python3-dev
安装。您可以python3-dev
通过运行以下命令进行安装:
- sudo apt install python3-dev
我们现在可以安装必要的 Python 和 MySQL 开发头文件和库:
- sudo apt install python3-dev libmysqlclient-dev default-libmysqlclient-dev
按y
和ENTER
接受安装。
一旦安装完成后,我们将使用pip3
安装mysqlclient
的库PyPi
。由于我们的版本pip
指向pip3
,我们可以直接使用pip
.
- pip install mysqlclient
您将收到与此类似的输出,验证它是否正确安装:
successfully installed mysqlclient...
Successfully installed mysqlclient-1.4.6
我们现在已经使用 PyPimysqlclient
连接器库成功安装了 MySQL 客户端。
步骤 5 — 创建数据库
现在,您的Django应用程序的框架已经建立,并mysqlclient
与mysql-server
已经安装,我们将需要配置你的Django的后端MySQL的兼容性。
使用以下命令通过 MySQL 根登录:
- sudo mysql -u root
当我们的提示发生变化时,我们就会知道我们在 MySQL 服务器中:
-
让我们使用以下命令检查当前数据库:
- SHOW DATABASES;
假设您尚未创建任何数据库,您将看到类似于以下内容的输出:
Output+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
注意:如果您在尝试连接时遇到错误,请验证您的密码是否正确以及您是否已正确安装 MySQL。否则,请重新访问有关如何安装和配置 MySQL的教程。
默认情况下,您将有 4 个已创建的数据库information_schema
、MySQL
、performance_schema
和sys
。我们不需要接触这些,因为它们包含对 MySQL 服务器本身很重要的信息。
现在,您已经成功登录到您的 MySQL 服务器,我们将创建初始数据库来保存我们博客的数据。
要在 MySQL 中创建数据库,请运行以下命令,为您的数据库使用一个有意义的名称:
- CREATE DATABASE blog_data;
成功创建数据库后,您将看到以下输出:
OutputQuery OK, 1 row affected (0.00 sec)
注意:如果您看到以下输出:
database creation failedERROR 1007 (HY000): Can't create database blog_data; database exists
然后,如错误所述,该名称的数据库blog_data
已存在。
如果您看到以下 MySQL 错误,则表示存在 MySQL 语法错误。验证您是否完全按照本教程中所示输入了命令。
database creation failedERROR 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 用户帐户,专门用于操作我们的新数据库。创建特定的数据库和帐户可以从管理和安全的角度支持我们。我们将在本指南中使用名称djangouser,但您可以随意使用与您相关的任何名称。
我们将创建此帐户,设置密码,并授予对我们创建的数据库的访问权限。我们可以通过键入以下命令来做到这一点。请记住在此处为您的数据库用户选择一个强密码,我们拥有password
:
- CREATE USER 'djangouser'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
接下来,让数据库知道我们的djangouser应该可以完全访问我们设置的数据库:
- GRANT ALL ON blog_data.* TO 'djangouser'@'%';
您现在拥有一个数据库和用户帐户,每个帐户都是专门为 Django 制作的。我们需要刷新权限,以便 MySQL 的当前实例知道我们最近所做的更改:
- FLUSH PRIVILEGES;
完成后,您可以通过键入EXIT;
或按CTRL
+退出 MySQL 服务器D
。
第 6 步 – 将 MySQL 数据库连接添加到您的应用程序
最后,我们会将数据库连接凭据添加到您的 Django 应用程序中。
注意:请务必记住,根据 Django 文档,连接设置按以下顺序使用:
– OPTIONS
– NAME
, USER
, PASSWORD
, HOST
, PORT
–MySQL option files.
让我们进行将 Django 博客应用程序连接到 MySQL 所需的更改。
导航到该settings.py
文件并将当前DATABASES
行替换为以下内容。我们将配置您的数据库字典,以便它知道使用 MySQL 作为您的数据库后端以及从哪个文件读取您的数据库连接凭据。
- nano ~/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',
},
}
}
...
保存并关闭文件。
接下来,让我们编辑配置文件,使其具有您的 MySQL 凭据。使用 nano assudo
编辑文件并添加以下信息:
- sudo nano /etc/mysql/my.cnf
添加以下行并包含您的相关信息。
...
[client]
database = blog_data
user = djangouser
password = your_actual_password
default-character-set = utf8
您会注意到它utf8
被设置为默认编码,这是在 MySQL 中编码 unicode 数据的常用方法。当您确定您的详细信息正确无误后,保存并关闭文件。
一旦文件被编辑,我们需要重新启动 MySQL 以使更改生效。
- sudo systemctl daemon-reload
- sudo systemctl restart mysql
请注意,重新启动 MySQL 需要几秒钟的时间,因此请耐心等待。
步骤 7 — 测试 MySQL 与应用程序的连接
我们需要验证 Django 中的配置是否正确检测到您的 MySQL 服务器。我们可以通过运行服务器来做到这一点。如果失败,则表示连接无法正常工作。否则,连接有效。
让我们首先使用以下内容将更改应用于 django:
- python manage.py migrate
我们需要导航到以下目录:
- cd ~/my_blog_app/blog/
从那里,我们可以运行以下命令:
- python manage.py runserver your-server-ip:8000
您现在将看到类似于以下内容的输出:
OutputPerforming system checks...
System check identified no issues (0 silenced).
You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
January 4, 2018 - 15:45:39
Django version 2.0.1, using settings 'blog.settings'
Starting development server at http://your-server-ip:8000/
Quit the server with CONTROL-C.
注意:您将在输出中看到未应用的迁移。但是,别担心,这将在接下来的教程中解决。这不会影响我们应用程序的初始设置。请继续。
按照输出中的说明并按照建议的链接查看您的 Web 应用程序并验证它是否正常工作。http://your-server-ip:8000/
如果您的页面与上面的屏幕截图类似,则您的 Django 应用程序正在按预期工作!
完成应用程序测试后,您可以按CTRL
+C
停止该runserver
命令。这将使您返回到您的编程环境。
当您准备好离开 Python 环境时,您可以运行以下deactivate
命令:
- deactivate
停用您的编程环境将使您回到终端命令提示符。
结论
在本教程中,您创建了 Django 博客的初始基础。您已安装、配置 MySQL 并将其连接到 Django 后端。您还在应用程序的settings.py
文件中添加了一些重要信息,例如TIME_ZONE
和ALLOWED_HOSTS
。
现在这些基本设置和配置已完成,您现在可以开始在 Django 应用程序中开发模型和应用迁移。