Django是一个用于快速创建Python应用程序的灵活框架。默认情况下,Django应用程序配置为将数据存储到轻量级SQLite数据库文件中。虽然这在某些负载下运行良好,但更传统的DBMS可以提高生产性能。
在本指南中,我们将演示如何安装和配置PostgreSQL以与Django应用程序一起使用。我们将安装必要的软件,为我们的应用程序创建数据库凭据,然后启动并配置一个新的Django项目以使用此后端。
首先,您需要一个干净的Ubuntu 16.04服务器实例,并设置非root用户。必须为非root用户配置sudo
权限。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
准备好继续后,以sudo
用户身份登录并继续阅读。
我们的第一步是从存储库安装我们需要的所有部分。我们将安装pip
,它是一个Python包管理器,以便安装和管理我们的Python组件。我们还将安装与它们交互所需的数据库软件和相关库。
Python 2和Python 3需要稍微不同的包,因此请选择下面与项目的Python版本匹配的命令。
如果您使用的是Python 2,请键入:
sudo apt-get update
sudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib
相反,如果您使用的是Python 3,请键入:
sudo apt-get update
sudo apt-get install python3-pip python3-dev libpq-dev postgresql postgresql-contrib
随着安装的完成,我们可以继续创建我们的数据库和数据库用户。
默认情况下,Postgres使用称为“对等身份验证”的身份验证方案进行本地连接。基本上,这意味着如果用户的操作系统用户名与有效的Postgres用户名匹配,则该用户无需进一步身份验证即可登录。
在Postgres安装期间,创建了一个名为postgres
的操作系统用户,以对应postgres
PostgreSQL管理用户。我们需要使用此用户来执行管理任务。我们可以使用sudo
并使用-u
选项传递用户名。
键入以下内容登录交互式Postgres会话:
sudo -u postgres psql
首先,我们将为Django项目创建一个数据库。出于安全原因,每个项目都应该有自己独立的数据库。我们将在本指南中为我们的数据库取名为myproject
,但最好选择更具描述性的内容:
CREATE DATABASE myproject;
注意
请记住使用分号在SQL提示符下结束所有命令。
接下来,我们将创建一个数据库用户,我们将用它来连接数据库并与之交互。将密码设置为强大且安全的密码:
CREATE USER myprojectuser WITH PASSWORD 'password';
之后,我们将为刚刚创建的用户修改一些连接参数。这将加速数据库操作,以便每次建立连接时都不必查询和设置正确的值。
我们将默认编码设置为UTF-8,这是Django所期望的。我们还将默认事务隔离方案设置为“read committed”,它阻止从未提交的事务中读取。最后,我们正在设定时区。默认情况下,我们的Django项目将设置为使用UTC
。这些都是Django项目本身的建议。
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
现在我们的数据库已经建立,我们可以安装Django。为了更好的灵活性,我们将在Python虚拟环境中安装Django及其所有依赖项。该virtualenv
软件包允许您轻松创建这些环境。
如果您使用的是Python 2,则可以键入以下命令安装正确的软件包:
sudo pip install virtualenv
如果您使用的是Python 3,请键入:
sudo pip3 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
,它将允许我们使用我们配置的数据库的包:
注意
无论您使用的是哪个版本的Python,在激活虚拟环境时,都应该使用pip
命令(不是pip3
)。
pip install django psycopg2
我们现在可以在我们的myproject
目录中启动Django项目。这将创建一个同名的子目录来保存代码本身,并将在当前目录中创建一个管理脚本。确保在命令末尾添加点,以便正确设置:
django-admin.py startproject myproject .
现在我们有了一个项目,我们需要配置它以使用我们创建的数据库。
打开位于子项目目录中的主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': '',
}
}
. . .
当你在这里时,你可能还需要调整ALLOWED_HOSTS
指令。这定义了地址或域名的白名单可用于连接到Django实例。具有不在此列表中的主机头的任何传入请求都将引发异常。Django要求您将其设置为防止某类安全漏洞。
在方括号中,列出与Django服务器关联的IP地址或域名。每个项目都应该在引号中列出,条目用逗号分隔。如果您希望请求整个域和任何子域,请在条目的开头添加一个句点。在下面的代码段中,有一些注释掉的示例用于演示:
. . .
# The simplest case: just add the domain name(s) and IP addresses of your Django server
# ALLOWED_HOSTS = [ 'example.com', '203.0.113.5']
# To respond to 'example.com' and any subdomains, start the domain with a dot
# ALLOWED_HOSTS = ['.example.com', '203.0.113.5']
ALLOWED_HOSTS = ['your_server_domain_or_IP', 'second_domain_or_IP', . . .]
完成后,保存并关闭文件。
现在配置了Django设置,我们可以将数据结构迁移到数据库并测试服务器。
我们可以从创建和应用迁移到我们的数据库开始。由于我们还没有任何实际数据,这只是设置初始数据库结构:
cd ~/myproject
python manage.py makemigrations
python manage.py migrate
创建数据库结构后,我们可以通过键入以下内容来创建管理帐户:
python manage.py createsuperuser
系统将要求您选择用户名,提供电子邮件地址,然后选择并确认该帐户的密码。
如果您按照初始服务器设置指南进行操作,则应该具有UFW防火墙。在我们访问Django开发服务器以测试我们的数据库之前,我们需要打开我们将在防火墙中使用的端口。
键入以下内容以允许外部连接到端口:
sudo ufw allow 8000
打开端口后,可以通过启动Django开发服务器来测试数据库是否正常运行:
python manage.py runserver 0.0.0.0:8000
在Web浏览器中,通过访问后跟:8000
的服务器的域名或IP地址,来访问默认的Django根页面:
http://server_domain_or_IP:8000
您应该看到默认索引页面:
附加/admin
到URL的末尾,您应该能够访问管理界面的登录屏幕:
使用createsuperuser
命令输入刚刚创建的用户名和密码。然后,您将进入管理界面:
完成调查后,可以通过在终端窗口中按CTRL-C来停止开发服务器。
通过访问管理界面,我们已确认我们的数据库已存储了我们的用户帐户信息,并且可以对其进行适当访问。
在本指南中,我们演示了如何安装和配置PostgreSQL作为Django项目的后端数据库。虽然SQLite可以在开发和轻量级生产期间轻松处理负载,但大多数项目都可以从实现功能更全面的DBMS中受益。
更多Ubuntu教程请前往腾讯云+社区学习更多知识。
参考文献:《How To Use PostgreSQL with your Django Application on Ubuntu 16.04》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。