答黄易音乐战组
Django是用Python编写的免费开源Web框架,用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。
在本教程中,您将学习如何连接到MySQL数据库,并为博客网站设置初始基础。这将涉及使用django-admin创建博客Web应用程序的框架,创建MySQL数据库,然后将Web应用程序连接到数据库。
准备
要学习本教程,您应该完成以下操作:
一台安装了Ubuntu操作系统的服务器,没有服务器的同学可以在这个页面购买。我们建议您使用免费使用腾讯云开发者实验室进进行试验。同时,我们需要您安装Django,关于Django安装您可以参考这个教程。
在服务器上需要安装MySQL服务,关于如何安装请参考这里,不过如果你是生产环境,我们建议您使用云数据库来进行存储。
有了这些准备并设置了Django开发环境后,我们可以继续创建我们的应用程序。
第一步 - 创建初始Django框架
为了给我们的应用大框架,我们需要使用django-admin命令生成项目框架。这个项目将成为我们博客应用的基础。
我们需要做的第一件事是转到主目录,我们可以使用以下命令:
cd ~
接下来,我们可以列出当前目录的内容:
ls
如果你从本系列的开头开始操作,你会发现有一个目录:
django-apps
这包含我们生成的框架项目,用于验证是否正确安装了所有内容。
由于这只是一个测试项目,我们不需要这个目录。我们将为我们的博客应用创建一个新目录。为您正在构建的应用程序调用一些有意义的名字。举个例子,我们称之为my_blog_app。
mkdir my_blog_app
现在,转到新创建的目录:
cd my_blog_app
然后,创建并激活Python虚拟环境。
virtualenv 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文件:
blog manage.py
现在您已经创建了一个包含博客应用程序初始启动的项目目录,我们可以继续下一步。
第二步 - 编辑设置
由于我们已经生成了项目框架,现在我们有了一个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/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.
...
# 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地址设置为您应用程序的ALLOWED_HOST(被允许主机)。
此时我们可以继续设置数据库连接。
第三步 - 安装MySQL数据库连接器
为了在我们的项目中使用MySQL,我们需要一个与Django兼容的Python3数据库连接器库。因此,我们将安装数据库连接器mysqlclient,这是MySQLdb的分叉版本。
根据mysqlclient文档,“MySQLdb是MySQL数据库向Python的线程兼容接口。”主要区别在于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继续。
然后,我们将使用pip3从PyPi中安装mysqlclient库。由于我们的版本pip指向pip3,我们只能使用pip。
pip install mysqlclient
您将看到类似于此的输出,验证它是否安装正确:
Collecting mysqlclient
Downloading mysqlclient-1.3.12.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.12
现在,使用以下命令安装MySQL服务器:
sudo apt-get install mysql-server
我们现在已经使用PyPi mysqlclient成功安装了MySQL服务器和MySQL客户端。
第四步 - 创建数据库
现在,您的Django应用程序的框架已经建立,并且已经安装mysqlclient和mysql-server,我们将需要配置你的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-12-29 11:59:33 UTC; 1min 44s ago
Main PID: 26525 (mysqld)
CGroup: /system.slice/mysql.service
└─26525 /usr/sbin/mysqld
Dec 29 11:59:32 ubuntu-512mb-nyc3-create-app-and-mysql systemd[1]: Starting MySQL Community Server...
Dec 29 11:59:33 ubuntu-512mb-nyc3-create-app-and-mysql systemd[1]: Started MySQL Community Server.
如果您看到类似于此的输出:
● mysqld.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
你可以运行sudo systemctl start mysql并且让mysql.service启动。
现在,您可以使用以下命令登录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.20-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.
使用以下命令向我们展示当前数据库:
SHOW DATABASES;
假设您尚未创建任何数据库,您将看到类似于以下内容的输出:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
默认情况下,数据库已经建立information_schema,MySQL,performance_schema和sys四个库,我们不需要配置它们,因为它们包含对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 1007 (HY000): Can't create database blog_data; database exists
接下来,看看我们的新建的数据库是否存在库中。
SHOW DATABASES;
您应该看到blog_data 已经在表中输出。
+--------------------+
| Database |
+--------------------+
| information_schema |
| blog_data |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
您已成功为您的博客创建了一个MySQL数据库。
您想要退出MySQL服务器,请按CTRL+ D。
步骤五 - 将MySQL数据库连接添加到您的应用程序
最后,我们将向Django应用程序添加数据库连接凭据。
注意:记住,连接设置,根据Django文档,请按以下顺序使用:
OPTIONS
NAME, USER, PASSWORD, HOST, PORT
MySQL option files.
让我们对Django博客应用程序连接到MySQL所需的更改。转到settings.py文件并使用以下内容替换当前DATABASES行。我们将配置您的数据库,以便它知道使用MySQL作为您的数据库后端以及从哪个文件读取您的数据库连接凭据:
...
# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': '/etc/mysql/my.cnf',
},
}
}
...
接下来,让我们编辑配置文件,使其具有您的MySQL凭据。使用nano作为sudo编辑文件并添加以下信息:
...
[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需要几秒钟,所以请耐心等待。
第六步 - 测试MySQL与应用程序的连接
我们需要验证Django中的配置是否正确检测了MySQL服务器。我们可以通过简单地运行服务器来实现。如果失败,则表示连接无法正常工作。
我们需要转到以下目录:
cd ~/my_blog_app/blog/
从那里,我们可以运行以下命令:
python 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.
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.
按照输出中的说明进行操作,在浏览器中打开http://your-server-ip:8000/查看您的Web应用程序并验证其是否正常工作。
📷
如果您的页面显示类似于上面的屏幕截图,您的Django应用程序已经正常工作。完成测试后,可以按CTRL+ C停止runserver命令。这将返回您的编程环境。
当您离开Python运行环境时,可以运行以下命令:
deactivate
停用编程环境将返回终端命令。