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

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

介绍

一个用Python编写的免费开放源码的Web框架,Django允许扩展性,可重用性和快速开发。

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

先决条件

本教程是Django开发系列的第二个教程。 要遵循本教程,您应该完成以下操作:

随着安装的先决条件和我们的Django开发环境的建立,我们可以继续创建我们的应用程序。

第1步 - 创建初始Django项目骨架

为了为我们的应用打下基础,我们需要使用django-admin命令生成项目框架。 这个生成的项目将是我们博客应用程序的基础。

我们需要做的第一件事是导航到主目录,我们可以使用以下命令:

cd ~

接下来,我们可以列出我们当前目录的内容:

ls

如果您从本系列的开始就从头开始,您会注意到有一个目录:

test_django_app

这是我们生成的骨架项目,用于验证一切安装是否正确。

因为这只是一个测试,我们不需要这个目录。 相反,我们将为我们的博客应用程序创建一个新的目录。 调用目录对您正在构建的应用程序有意义。 例如,我们称之为my_blog_app

mkdir my_blog_app

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

cd my_blog_app

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

django-admin startproject blog

通过导航到blog/目录来验证它是否有效:

cd blog

在运行前面的django-admin命令后,应该在当前目录~/my_blog_app/创建blog/目录。

运行ls以验证是否已创建必需的项目。 应该有一个blog目录和一个manage.py文件:

blog manage.py

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

第2步 - 编辑设置

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

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

现在导航到settings.py文件所在的目录:

cd ~/my_blog_app/blog/blog/

然后,使用您选择的nano或文本编辑器,打开并编辑settings.py文件:

nano settings.py

我们正在编辑TIME_ZONE字段,因此导航到文件的底部,如下所示:

settings.py
...
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
...

我们将修改TIME_ZONE行,使其设置为您当前的时区。 在这个例子中我们将使用纽约的时区:

settings.py
...
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/New_York'

USE_I18N = True
...

让我们保持文件打开,因为我们需要为静态文件添加路径。 从Django Web应用程序获取的文件称为静态文件 这可能包括任何必要的文件来呈现完整的网页,包括JavaScript,CSS和图像。

转到settings.py文件的末尾,添加STATIC_ROOT ,如下所示:

settings.py
...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

现在我们已经添加了时区和静态文件的路径,我们应该将IP添加到允许的主机列表中。 导航到settings.py文件的那行,其中显示ALLOWED_HOSTS ,它将在settings.py文件的顶部。

settings.py
...
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['your server IP address']

# Application definition
...

在方括号和单引号之间添加服务器的IP地址。

一旦您对所做的更改感到满意,请按CTRL + X保存文件,然后按y确认更改。

很好,您已经成功编辑了settings.py文件,以便配置正确的时区。 您还添加了静态文件的路径,并将您的ip address设置为您的应用程序的ALLOWED_HOST

此时我们可以继续设置数据库连接。

第3步 - 安装MySQL数据库连接器

为了在我们的项目中使用MySQL,我们将需要一个与Django兼容的Python 3数据库连接库。 所以,我们将安装数据库连接器, mysqlclient ,它是MySQLdb的分支版本。

根据mysqlclient文档,“ MySQLdb是提供Python数据库API的流行MySQL数据库服务器的线程兼容接口”。主要区别在于mysqlclient具有包含Python 3支持的附加优势。

首先我们需要做的是安装python3-dev 您可以通过运行以下命令来安装python3-dev

sudo apt-get install python3-dev

一旦安装了python3-dev ,我们可以安装必要的Python和MySQL开发头文件和库:

sudo apt-get install python3-dev libmysqlclient-dev

当您看到以下输出:

After this operation, 11.9 MB of additional disk space will be used.
Do you want to continue? [Y/n]

输入y然后按ENTER继续。

然后,我们将使用pip3PyPi安装mysqlclient库,像这样:

sudo pip3 install mysqlclient

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

Collecting mysqlclient
  Downloading mysqlclient-1.3.10.tar.gz (82kB)
    100% |████████████████████████████████| 92kB 6.7MB/s
Building wheels for collected packages: mysqlclient
  Running setup.py bdist_wheel for mysqlclient ... done
  Stored in directory: /root/.cache/pip/wheels/32/50/86/c7be3383279812efb2378c7b393567569a8ab1307c75d40c5a
Successfully built mysqlclient
Installing collected packages: mysqlclient
Successfully installed mysqlclient-1.3.10

您现在已经成功安装了mysqlclient连接器库。

第4步 - 创建数据库

随着您的Django应用程序的骨架设置和mysqlclient安装,我们将需要配置您的Django后端的MySQL兼容性。

首先,让我们启动MySQL服务:

systemctl status mysql.service

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

● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2017-08-19 11:59:33 UTC; 1min 44s ago
 Main PID: 26525 (mysqld)
   CGroup: /system.slice/mysql.service
        └─26525 /usr/sbin/mysqld

现在您可以使用以下命令使用MySQL凭据登录。 -u是用于声明用户名的标志, -p是告诉MySQL该用户需要密码的标志:

mysql -u db_user -p

然后,您将看到输出要求您的db_user的密码:

Enter password:

正确输入密码后,您将看到以下输出:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.19-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

我们可以让MySQL通过以下命令向我们显示当前的数据库:

SHOW DATABASES;

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

+--------------------+
| Database          |
+--------------------+
| information_schema |
| mysql             |
| performance_schema |
| sys               |
+--------------------+
4 rows in set (0.00 sec)

注意:如果在尝试连接时出现错误,请确认您的密码正确,并且您已正确安装MySQL。 否则重新访问有关如何安装和配置MySQL教程

默认情况下,您将创建4个数据库, information_schemaMySQLperformance_schemasys 我们不需要Touch这些,因为它们包含对MySQL服务器本身重要的信息。

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

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

CREATE DATABASE blog_data;

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

Query OK, 1 row affected (0.00 sec)

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

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

然后,随着错误状态,名为blog_data的数据库已经存在。

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

ERROR 1064 (42000): You have an error in your SQL syntax;

接下来,验证数据库是否列在可用数据库列表中:

SHOW DATABASES;

您应该会看到blog_data数据库是输出中包含的数据库之一:

+--------------------+
| Database          |
+--------------------+
| information_schema |
| blog_data         |
| MySQL             |
| performance_schema |
| sys               |
+--------------------+
5 rows in set (0.00 sec)

您已成功为您的博客创建了一个MySQL数据库。

无论何时退出MySQL服务器,请按CTRL + D

第5步 - 将MySQL数据库连接添加到应用程序

最后,我们将把数据库连接凭据添加到你的Django应用程序。

注意:重要的是要记住,根据Django文档,连接设置按以下顺序使用: - OPTIONS - NAMEUSERPASSWORDHOSTPORT - MySQL option files.

让我们将您的Django博客应用程序连接到MySQL所需的更改。

导航到settings.py文件,并使用以下命令替换当前的DATABASES行。 我们将配置您的数据库字典,以便知道使用MySQL作为数据库后端以及从哪个文件读取数据库连接凭据:

settings.py
...
# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/etc/mysql/my.cnf',
        },
    }
}
...

接下来,我们来编辑配置文件,以便它具有你的MySQL凭据。 使用nano作为sudo来编辑文件并添加以下信息:

sudo nano /etc/mysql/my.cnf
my.cnf中
...
[client]
database = db_name
user = db_user
password = db_password
default-character-set = utf8

在我们的例子中,数据库名称是blog_data ,MySQL服务器的用户名是你创建的,密码是你创建的MySQL服务器密码。 另外,您会注意到utf8被设置为默认编码,这是在MySQL中编码unicode数据的常见方式。

文件编辑完成后,我们需要重新启动MySQL才能使更改生效。

systemctl daemon-reload
systemctl restart mysql

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

第6步 - 测试MySQL连接到应用程序

我们需要验证Django中的配置正确检测您的MySQL服务器。 我们可以通过简单的运行服务器来实现。 如果它失败,这意味着连接不能正常工作。 否则,连接有效。

我们需要导航到以下目录:

cd ~/my_blog_app/blog/

从那里我们可以运行以下命令:

python3 manage.py runserver your-server-ip:8000

您现在将看到以下输出:

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.

August 19, 2017 - 15:45:39
Django version 1.11.4, 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默认页面

如果您的页面类似于上面的截图,您的Django应用程序正常工作!

结论

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

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