如何在 Ubuntu 14.04 上的 Django 应用程序中使用 MySQL 或 MariaDB

介绍

Django 是一个灵活的框架,可以快速创建 Python 应用程序. 默认情况下,Django 应用程序被配置为将数据存储在轻量级的 SQLite 数据库文件中。

在本指南中,我们将展示如何安装和配置MySQL或MariaDB以与您的Django应用程序一起使用,我们将安装必要的软件,为我们的应用程序创建数据库凭据,然后启动并配置一个新的Django项目以使用这个后端。

前提条件

要开始,你需要一个干净的 Ubuntu 14.04 服务器实例,并安装了非 root 用户。非 root 用户必须配置有sudo特权。 了解如何通过遵循我们的 初始服务器设置指南来设置此功能。

当你准备好继续阅读时,继续阅读。

安装来自 Ubuntu 存储库的组件

我们的第一步将是从库中安装我们需要的所有零件,我们将安装Python包管理器pip,以便安装和管理我们的Python组件,我们还将安装数据库软件和相关库,以便与它们进行交互。

我们将在下面涵盖MySQL和MariaDB,所以选择与您想要使用的DBMS相关的部分。

思考

如果您想使用MySQL,以下apt命令将为您提供所需的包:

1sudo apt-get update
2sudo apt-get install python-pip python-dev mysql-server libmysqlclient-dev

您将被要求选择并确认管理 MySQL 帐户的密码。

安装后,您可以通过键入创建数据库目录结构:

1sudo mysql_install_db

然后,您可以通过运行一个简单的安全脚本:

1sudo mysql_secure_installation

您将被要求在安装过程中为 MySQL 设置的管理密码。之后,您将被问到一系列问题。 除了第一个问题,请您选择另一个管理密码,为每个问题选择是。

随着安装和初始数据库配置的结束,我们可以继续创建我们的数据库和数据库用户。

玛丽亚

如果您更喜欢 MariaDB,您可以按照下面的说明来安装它并执行必要的初始配置。

1sudo apt-get update
2sudo apt-get install python-pip python-dev mariadb-server libmariadbclient-dev libssl-dev

您将被要求选择并确认管理 MariaDB 帐户的密码。

然后,您可以通过运行一个简单的安全脚本:

1sudo mysql_secure_installation

您将被要求在安装过程中为 MariaDB 设置的管理密码。之后,您将被问到一系列问题。 除了第一个问题,请您选择另一个管理密码,为每个问题选择是。

有了安装和初始数据库配置,我们可以继续创建我们的数据库和数据库用户。

创建数据库和数据库用户

此指南的其余部分可以随时遵循,无论您是否安装了MySQL或MariaDB。

我们可以通过键入以下方式开始使用我们的数据库软件进行交互式会话(无论您使用的数据库软件如何,命令都是相同的):

1mysql -u root -p

您将被提示在安装过程中选择的管理密码. 之后,您将被提示。

首先,我们将为我们的 Django 项目创建一个数据库. 每个项目都应该有其自己的孤立数据库,出于安全原因. 在本指南中,我们将我们的数据库称为myproject,但最好选择一些更为描述性的内容。

1CREATE DATABASE myproject CHARACTER SET UTF8;

请记住,在 SQL 提示中用半色符号结束所有命令。

接下来,我们将创建一个数据库用户,我们将使用它来连接和与数据库互动。

1CREATE USER myprojectuser@localhost IDENTIFIED BY 'password';

现在,我们需要做的就是给我们的数据库用户访问我们创建的数据库的权利:

1GRANT ALL PRIVILEGES ON myproject.* TO myprojectuser@localhost;

扫描这些更改,以便它们在当前会话中可用:

1FLUSH PRIVILEGES;

退出 SQL 提示,返回您的常规壳会话:

1exit

在虚拟环境中安装 Django

现在我们的数据库已经设置,我们可以安装Django。为了更好的灵活性,我们将在Python虚拟环境中安装Django及其所有依赖。

您可以获得virtualenv包,允许您通过键入创建这些环境:

1sudo pip install virtualenv

创建一个目录来保留你的Django项目. 然后移动到目录:

1mkdir ~/myproject
2cd ~/myproject

我们可以创建一个虚拟环境来存储我们的Django项目的Python要求,通过键入:

1virtualenv myprojectenv

这将安装Python的本地副本和pip到项目目录中的名为myprojectenv的目录中。

在我们在虚拟环境中安装应用程序之前,我们需要激活它,您可以通过键入:

1source myprojectenv/bin/activate

您的提示将更改,表示您现在在虚拟环境中运行,它将看起来像(myprojectenv)user@host:~/myproject$

一旦你的虚拟环境是活跃的,你可以用pip安装Django,我们还会安装mysqlclient包,使我们能够使用我们配置的数据库:

1pip install django mysqlclient

我们现在可以在我们的myproject目录中启动一个Django项目,这将创建一个同名子目录以保留代码本身,并在当前目录中创建一个管理脚本。

1django-admin.py startproject myproject .

设置 Django 数据库设置

现在我们有一个项目,我们需要将其配置为使用我们创建的数据库。

打开位于儿童项目目录中的主要 Django 项目设置文件:

1nano ~/myproject/myproject/settings.py

在文件的底部,你会看到一个DATABASES部分,看起来像这样:

 1. . .
 2
 3DATABASES = {
 4    'default': {
 5        'ENGINE': 'django.db.backends.sqlite3',
 6        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
 7    }
 8}
 9
10. . .

我们需要改变这一点,以便使用我们的MySQL/MariaDB数据库。

首先,更改引擎,以便它指向mysql后端而不是sqlite3后端。对于NAME,使用您的数据库名称(在我们的示例中myproject).我们还需要添加登录凭证。我们需要用户名、密码和主机连接到。我们将添加和空置端口选项,以便选择默认:

 1. . .
 2
 3DATABASES = {
 4    'default': {
 5        'ENGINE': 'django.db.backends.mysql',
 6        'NAME': 'myproject',
 7        'USER': 'myprojectuser',
 8        'PASSWORD': 'password',
 9        'HOST': 'localhost',
10        'PORT': '',
11    }
12}
13
14. . .

完成后,保存并关闭文件。

迁移数据库并测试您的项目

现在 Django 设置已配置,我们可以将数据结构迁移到我们的数据库并测试服务器。

我们可以从创建和应用迁移到我们的数据库开始,因为我们还没有任何实际数据,这将简单地设置最初的数据库结构:

1cd ~/myproject
2python manage.py makemigrations
3python manage.py migrate

创建数据库结构后,我们可以通过键入创建一个管理帐户:

1python manage.py createsuperuser

您将被要求选择用户名,提供电子邮件地址,并选择并确认帐户的密码。

一旦设置了管理员帐户,您可以通过启动 Django 开发服务器来测试您的数据库是否正常运行:

1python manage.py runserver 0.0.0.0:8000

在您的 Web 浏览器中,访问您的服务器的域名或 IP 地址,然后是 :8000 来访问默认的 Django 根页面:

1http://server_domain_or_IP:8000

您应该看到默认索引页面:

Django index

添加/admin到URL的尽头,你应该能够访问登录屏幕到管理员界面:

Django admin login

输入你刚刚使用createsuperuser命令创建的用户名和密码,然后你将被带到管理员界面:

Django admin interface

完成调查后,您可以通过在终端窗口中按 CTRL-C 来阻止开发服务器。

通过访问管理员界面,我们确认我们的数据库存储了我们的用户帐户信息,并且可以适当访问。

结论

在本指南中,我们展示了如何安装和配置MySQL或MariaDB作为Django项目的后端数据库.虽然SQLite可以在开发和轻量生产使用期间轻松处理负载,但大多数项目都受益于实施更具功能的DBMS。

Published At
Categories with 技术
comments powered by Disqus