如何在 Ubuntu 20.04 上将 PostgreSQL 与 Django 应用程序结合使用

介绍

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

在本指南中,您将安装和配置PostgreSQL(常被称为Postgres)以与您的Django应用程序一起使用,您将安装必要的软件,为我们的应用程序创建数据库凭证,然后启动并配置一个新的Django项目以使用此后端。

前提条件

*您将需要一个清洁的Ubuntu 20.04服务器实例,具有非root用户配置的sudo特权。学习如何通过遵循我们的 初始服务器设置指南来设置此功能。

当你准备好继续时,登录为你的sudo用户。

步骤 1 – 从 Ubuntu 存储库中安装组件

首先,您将安装必要的组件,其中包括pip,用于安装和管理Python组件的Python包管理器,以及数据库软件及其相关库。

您将使用Python 3,它与Ubuntu 20.04搭配,通过键入开始安装:

1sudo apt update
2sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib

安装完成后,您可以继续进入数据库。

步骤2:创建数据库和数据库用户

默认情况下,Postgres 使用一个名为对等身份验证的身份验证方案进行本地连接,这基本上意味着如果用户的操作系统用户名匹配一个有效的Postgres 用户名,则该用户可以无需进一步身份验证登录。

在 Postgres 安装过程中,一个名为 postgres 的操作系统用户被创建,以匹配 postgres 的 PostgreSQL 管理用户. 您需要使用该用户来执行管理任务。

通过键入登录到一个互动的 Postgres 会话:

1sudo -u postgres psql

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

1CREATE DATABASE myproject;

<$>[注] [标签注] 请记住用半字符结束 SQL 提示中的所有命令。

接下来,您将创建一个数据库用户,您将使用它来连接和与数据库进行交互。

1CREATE USER myprojectuser WITH PASSWORD 'password';

之后,您将更改您刚刚创建的用户的一些连接参数,从而加速数据库操作,以免每次建立连接时需要查询和设置正确值。

1ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
2ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
3ALTER ROLE myprojectuser SET timezone TO 'UTC';

您正在将默认编码设置为 UTF-8,而Django 也预期。您还将默认的交易隔离方案设置为读取承诺,即从未承诺的交易中读取区块。最后,您正在设置时区。

现在,您所需要做的就是给您的数据库用户访问您创建的数据库的权限:

1GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

退出 SQL 提示,返回 postgres 用户的壳会话:

1\q

在虚拟环境中安装 Django

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

要安装virtualenv,键入:

1sudo pip3 install virtualenv

创建并移动到一个目录,以保持您的Django项目:

1mkdir ~/myproject
2cd ~/myproject

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

1python3 -m virtualenv myprojectenv

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

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

1source myprojectenv/bin/activate

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

一旦你的虚拟环境是活跃的,你可以安装官方版本的Django与pip。你还会安装的psycopg2包,这将允许我们使用你配置的Postgres数据库:

<$>[注] [标签注] 无论您正在使用哪个版本的 Python,当虚拟环境被激活时,您应该使用pip命令(而不是pip3)。

1pip install Django psycopg2

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

1django-admin startproject myproject .

设置 Django 数据库设置

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

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

1nano ~/myproject/myproject/settings.py

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

 1[label ~/myproject/myproject/settings.py]
 2. . .
 3
 4DATABASES = {
 5    'default': {
 6            'ENGINE': 'django.db.backends.sqlite3',
 7            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
 8    }
 9}
10
11. . .

此功能目前已配置为使用 SQLite 作为数据库,您需要更改此功能,以便使用您的 PostgreSQL 数据库。

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

 1[label ~/myproject/myproject/settings.py]
 2. . .
 3
 4DATABASES = {
 5    'default': {
 6        'ENGINE': 'django.db.backends.postgresql',
 7        'NAME': 'myproject',
 8        'USER': 'myprojectuser',
 9        'PASSWORD': 'password',
10        'HOST': 'localhost',
11        'PORT': '',
12    }
13}
14
15. . .

当你在这里时,你还需要调整ALLOWED_HOSTS指令。这定义了允许连接到 Django 实例的地址或域名的白列表。任何未列入此列表的 Host 标题的输入请求都会引发一个例外。

在下面的片段中,有一些被评论的例子被用来展示:

1[label ~/myproject/myproject/settings.py]
2. . .
3# The simplest case: just add the domain name(s) and IP addresses of your Django server
4# ALLOWED_HOSTS = [ 'example.com', '203.0.113.5']
5# To respond to 'example.com' and any subdomains, start the domain with a dot
6# ALLOWED_HOSTS = ['.example.com', '203.0.113.5']
7ALLOWED_HOSTS = ['your_server_domain_or_IP']

在方块中,列出与您的 Django 服务器相关的 IP 地址或域名. 每个项目都应列出报价,其中有条纹分开的条目。 如果您希望对整个域名和任何子域的请求,请预先预定一个期限,以便进入。

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

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

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

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

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

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

1python manage.py createsuperuser

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

如果您遵循最初的服务器设置指南,您应该有一个 UFW 防火墙,在您可以访问 Django 开发服务器来测试您的数据库之前,您需要在防火墙中打开端口。

允许外部连接到端口,键入:

1sudo ufw allow 8000

一旦打开端口,您可以通过启动 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 来阻止开发服务器。

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

结论

在本指南中,您已经展示了如何安装和配置PostgreSQL作为Django项目的后端数据库,虽然SQLite可以在开发和轻量生产使用期间轻松处理负载,但大多数项目都受益于实施一个更具功能的数据库管理系统。

要将您的项目带到更远的地方,请参阅我们在 Ubuntu 20.04 上使用 Postgres, Nginx 和 Gunicorn 设置 Django 的指南(https://andsky.com/tech/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-20-04)。

Published At
Categories with 技术
comments powered by Disqus