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

介绍

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文件:

Output
blog manage.py

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

步骤 3 — 编辑设置

由于我们已经生成了骨架项目,我们现在有了一个settings.py文件。

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

我们想编辑文件,所以让我们用我们选择的文本编辑器打开文件的路径。在这里,我们将使用 nano。

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

由于我们正在编辑该TIME_ZONE字段,因此我们将导航到文件的底部部分,类似于下面的内容。

设置.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行,使其设置为您当前的时区。在此示例中,我们将使用纽约的时区:

设置.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如下所示:

设置.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 添加到允许的主机列表中。导航到settings.py文件所在的行ALLOWED_HOSTS,它将位于settings.py文件的顶部

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

yENTER接受安装。

一旦安装完成后,我们将使用pip3安装mysqlclient的库PyPi由于我们的版本pip指向pip3,我们可以直接使用pip.

  • pip install mysqlclient

您将收到与此类似的输出,验证它是否正确安装:

successfully installed mysqlclient
... Successfully installed mysqlclient-1.4.6

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

步骤 5 — 创建数据库

现在,您的Django应用程序的框架已经建立,并mysqlclientmysql-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_schemaMySQLperformance_schemasys我们不需要接触这些,因为它们包含对 MySQL 服务器本身很重要的信息。

现在,您已经成功登录到您的 MySQL 服务器,我们将创建初始数据库来保存我们博客的数据。

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

  • CREATE DATABASE blog_data;

成功创建数据库后,您将看到以下输出:

Output
Query OK, 1 row affected (0.00 sec)

注意:如果您看到以下输出:

database creation failed
ERROR 1007 (HY000): Can't create database blog_data; database exists

然后,如错误所述,该名称的数据库blog_data已存在。

如果您看到以下 MySQL 错误,则表示存在 MySQL 语法错误。验证您是否完全按照本教程中所示输入了命令。

database creation failed
ERROR 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

删除那里的行并将其替换为以下内容,确保保留正确数量的花括号。

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

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

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

您现在将看到类似于以下内容的输出:

Output
Performing 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 默认页面

如果您的页面与上面的屏幕截图类似,则您的 Django 应用程序正在按预期工作!

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

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

  • deactivate

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

结论

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

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

觉得文章有用?

点个广告表达一下你的爱意吧 !😁