介绍
一个用Python编写的免费开放源码的Web框架,Django允许扩展性,可重用性和快速开发。
在本教程中,您将学习如何设置具有与MySQL数据库连接的博客网站的初始基础。 这将涉及使用django-admin
创建博客Web应用程序的骨架结构,创建MySQL数据库,然后将Web应用程序连接到数据库。
先决条件
本教程是Django开发系列的第二个教程。 要遵循本教程,您应该完成以下操作:
- 在Ubuntu 16.04服务器上安装必要的软件以使用Django。 如果您尚未设置具有sudo权限的服务器或尚未安装Django,则可以按照本系列的第一个教程“ 如何安装Django并在Ubuntu 16.04上设置开发环境 ”。
- 在进行本教程之前安装MySQL。 如果你还没有安装,可以按照“如何在Ubuntu 16.04上安装最新的MySQL”的第2步 ,其中包括安装MySQL的命令。
随着安装的先决条件和我们的Django开发环境的建立,我们可以继续创建我们的应用程序。
第1步 - 创建初始Django项目骨架
为了为我们的应用打下基础,我们需要使用django-admin
命令生成项目框架。 这个生成的项目将是我们博客应用程序的基础。
我们需要做的第一件事是导航到主目录,我们可以使用以下命令:
cd ~
接下来,我们可以列出我们当前目录的内容:
ls
如果您从本系列的开始就从头开始,您会注意到有一个目录:
Outputtest_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
文件:
Outputblog 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
字段,因此导航到文件的底部,如下所示:
...
# 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
行,使其设置为您当前的时区。 在这个例子中我们将使用纽约的时区:
...
# 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
,如下所示:
...
# 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
文件的顶部。
...
# 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
当您看到以下输出:
OutputAfter this operation, 11.9 MB of additional disk space will be used.
Do you want to continue? [Y/n]
输入y
然后按ENTER
继续。
然后,我们将使用pip3
从PyPi
安装mysqlclient
库,像这样:
sudo pip3 install mysqlclient
您将看到与此类似的输出,验证它是否正确安装:
successfully installed mysqlclientCollecting 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
您将看到类似于以下内容的输出:
starting 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的密码:
OutputEnter password:
正确输入密码后,您将看到以下输出:
OutputWelcome 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;
假设您尚未创建任何数据库,您将看到类似于以下内容的输出:
Output+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
注意:如果在尝试连接时出现错误,请确认您的密码正确,并且您已正确安装MySQL。 否则重新访问的 。
默认情况下,您将创建4个数据库, information_schema
, MySQL
, performance_schema
和sys
。 我们不需要Touch这些,因为它们包含对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数据库。
无论何时退出MySQL服务器,请按CTRL
+ D
第5步 - 将MySQL数据库连接添加到应用程序
最后,我们将把数据库连接凭据添加到你的Django应用程序。
注意:重要的是要记住,根据Django文档,连接设置按以下顺序使用: - OPTIONS
- NAME
, USER
, PASSWORD
, HOST
, PORT
- MySQL option files.
让我们将您的Django博客应用程序连接到MySQL所需的更改。
导航到settings.py
文件,并使用以下命令替换当前的DATABASES
行。 我们将配置您的数据库字典,以便知道使用MySQL作为数据库后端以及从哪个文件读取数据库连接凭据:
...
# 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
...
[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
您现在将看到以下输出:
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.
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博客的初始基础。 您已将MySQL配置并连接到Django后端。 您还向应用程序的settings.py
文件添加了一些重要信息,例如TIME_ZONE
和ALLOWED_HOSTS
。
现在,这些基本设置和配置已经完成,您现在可以开始在Django应用程序中开发模型并应用迁移。