如何在 Ubuntu 14.04 上将 PostgreSQL 与 Django 应用程序一起使用
介绍
Django 是一个灵活的框架,用于快速创建 Python 应用程序。默认情况下,Django 应用程序配置为将数据存储到轻量级 SQLite 数据库文件中。虽然这在某些负载下运行良好,但更传统的 DBMS 可以提高生产性能。
在本指南中,我们将演示如何安装和配置 PostgreSQL 以与您的 Django 应用程序一起使用。我们将安装必要的软件,为我们的应用程序创建数据库凭据,然后启动并配置一个新的 Django 项目以使用此后端。
先决条件
首先,您需要一个干净的 Ubuntu 14.04 服务器实例,并设置了非 root 用户。非 root 用户必须配置 sudo
权限。了解如何按照我们的初始服务器设置指南进行设置。
当您准备好继续时,请继续阅读。
从 Ubuntu 存储库安装组件
我们的第一步是从存储库安装我们需要的所有部分。我们将安装 Python 包管理器 pip
,以安装和管理我们的 Python 组件。我们还将安装数据库软件和与之交互所需的相关库。
以下 apt
命令将为您提供所需的包:
sudo apt-get update
sudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib
安装完成后,我们可以继续创建我们的数据库和数据库用户。
创建数据库和数据库用户
默认情况下,Postgres 对本地连接使用称为“对等身份验证”的身份验证方案。基本上,这意味着如果用户的操作系统用户名与有效的 Postgres 用户名匹配,则该用户无需进一步身份验证即可登录。
在 Postgres 安装期间,创建了一个名为 postgres
的操作系统用户,以对应于 postgres
PostgreSQL 管理用户。我们需要更改为该用户来执行管理任务:
sudo su - postgres
您现在应该处于 postgres
用户的 shell 会话中。通过键入以下内容登录到 Postgres 会话:
psql
首先,我们将为我们的 Django 项目创建一个数据库。出于安全原因,每个项目都应该有自己的独立数据库。我们将在本指南中调用我们的数据库 myproject
,但最好选择更具描述性的名称:
CREATE DATABASE myproject;
请记住在 SQL 提示符下以分号结束所有命令。
接下来,我们将创建一个数据库用户,我们将使用它来连接到数据库并与之交互。将密码设置为强而安全的密码:
CREATE USER myprojectuser WITH PASSWORD 'password';
之后,我们将为刚刚创建的用户修改一些连接参数。这将加快数据库操作,这样就不必在每次建立连接时都查询和设置正确的值。
我们将默认编码设置为 Django 期望的 UTF-8。我们还将默认事务隔离方案设置为“读取已提交”,它会阻止未提交事务的读取。最后,我们正在设置时区。默认情况下,我们的 Django 项目将设置为使用 UTC
:
ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myprojectuser SET timezone TO 'UTC';
现在,我们需要做的就是授予我们的数据库用户对我们创建的数据库的访问权限:
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
退出 SQL 提示符返回到 postgres
用户的 shell 会话:
\q
退出 postgres
用户的 shell 会话以返回到普通用户的 shell 会话:
exit
在虚拟环境中安装 Django
现在我们的数据库已经设置好了,我们可以安装 Django 了。为了更好的灵活性,我们将在 Python 虚拟环境中安装 Django 及其所有依赖项。
您可以获得 virtualenv
包,它允许您通过键入以下内容来创建这些环境:
sudo pip install virtualenv
创建一个目录来保存您的 Django 项目。之后进入目录:
mkdir ~/myproject
cd ~/myproject
我们可以创建一个虚拟环境来存储我们的 Django 项目的 Python 需求,方法是键入:
virtualenv myprojectenv
这会将 Python 和 pip
的本地副本安装到项目目录中名为 myprojectenv
的目录中。
在我们在虚拟环境中安装应用程序之前,我们需要激活它。您可以通过键入以下内容来执行此操作:
source myprojectenv/bin/activate
您的提示符将发生变化,表明您现在正在虚拟环境中操作。它看起来像这样 (myprojectenv)user@host:~/myproject$
。
一旦您的虚拟环境处于活动状态,您就可以使用 pip
安装 Django。我们还将安装 psycopg2
包,它将允许我们使用我们配置的数据库:
pip install django psycopg2
我们现在可以在我们的 myproject
目录中启动一个 Django 项目。这将创建一个同名的子目录来保存代码本身,并将在当前目录中创建一个管理脚本。确保在命令末尾添加点,以便正确设置:
django-admin.py startproject myproject .
配置 Django 数据库设置
现在我们有了一个项目,我们需要配置它以使用我们创建的数据库。
打开位于子项目目录中的主 Django 项目设置文件:
nano ~/myproject/myproject/settings.py
在文件底部,您会看到一个 DATABASES
部分,如下所示:
. . .
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
. . .
当前配置为使用 SQLite 作为数据库。我们需要更改它,以便使用我们的 PostgreSQL 数据库。
首先,更改引擎,使其使用 postgresql_psycopg2
后端而不是 sqlite3
后端。对于 NAME
,请使用您的数据库的名称(在我们的示例中为 myproject
)。我们还需要添加登录凭据。我们需要用户名、密码和要连接的主机。我们将添加端口选项并将其留空,以便选择默认值:
. . .
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
. . .
完成后,保存并关闭文件。
迁移数据库并测试您的项目
现在已经配置了 Django 设置,我们可以将我们的数据结构迁移到我们的数据库并测试服务器。
我们可以从创建迁移并将其应用到我们的数据库开始。由于我们还没有任何实际数据,这将简单地设置初始数据库结构:
cd ~/myproject
python manage.py makemigrations
python manage.py migrate
创建数据库结构后,我们可以通过键入以下内容来创建管理帐户:
python manage.py createsuperuser
您将被要求选择一个用户名,提供一个电子邮件地址,然后选择并确认该帐户的密码。
设置管理员帐户后,您可以通过启动 Django 开发服务器来测试数据库是否正常运行:
python manage.py runserver 0.0.0.0:8000
在您的网络浏览器中,访问您服务器的域名或 IP 地址,然后访问 :8000
以访问默认的 Django 根页面:
http://server_domain_or_IP:8000
您应该会看到默认的索引页:

将 /admin
附加到 URL 的末尾,您应该能够访问管理界面的登录屏幕:

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

完成调查后,您可以通过在终端窗口中按 CTRL-C 来停止开发服务器。
通过访问管理界面,我们已经确认我们的数据库已经存储了我们的用户帐户信息并且可以适当地访问它。
结论
在本指南中,我们演示了如何安装和配置 PostgreSQL 作为 Django 项目的后端数据库。虽然 SQLite 可以轻松处理开发和轻型生产使用期间的负载,但大多数项目都受益于实施功能更全的 DBMS。