如何在 Ubuntu 22.04 上的 Django 应用程序中使用 PostgreSQL

介绍

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

在本指南中,您将与 Django 应用程序一起安装和配置 PostgreSQL(通常称为 Postgres)。

前提条件

要开始,你需要一个 Ubuntu 22.04 服务器,具有非root的用户设置,配置有sudo特权。

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

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

首先,通过使用apt来更新您的包管理器缓存:

1sudo apt update

然后,为您的 Django 项目安装必不可少的组件,其中包括pip,即安装和管理 Python 组件的 Python 包管理器。

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

安装 Python、Postgres 和其他库后,您可以继续创建您的数据库。

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

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

在 Postgres 安装过程中,一个名为 postgres的操作系统用户被创建,以匹配 postgres的 PostgreSQL 管理用户。您需要使用这个用户 postgres来执行管理任务。 使用sudo来传输用户名postgres以及运行命令作为用户的-u选项,而不是 root。 登录到交互式 Postgres 会话中,写下列内容:

1sudo -u postgres psql

您现在可以访问postgres用户的壳会话。

接下来,为您的 Django 项目创建一个数据库. 每个项目都应该有其自身的孤立数据库,出于安全原因。 该数据库在本指南中被称为myproject,但最好将其命名为更为描述性的。

1CREATE DATABASE myproject;

现在创建一个数据库用户,将连接并与数据库互动. 将密码设置为强大而安全的内容:

1CREATE USER myproject_user WITH PASSWORD 'myproject_database_password';

随后,为您创建的用户修改一些连接参数,这将加快数据库操作,以便不需要查询正确的值,并在每次建立连接时设置。

1ALTER ROLE myproject_user SET client_encoding TO 'utf8';

然后,将默认交易隔离方案设置为读取承诺,其中块从未承诺的交易中读取:

1ALTER ROLE myproject_user SET default_transaction_isolation TO 'read committed';

最后,设置时区. 默认情况下,您的 Django 项目设置为使用UTC。 以下是 Django 项目的推荐(https://docs.djangoproject.com/en/4.1/ref/databases/#optimizing-postgresql-s-configuration):

1ALTER ROLE myproject_user SET timezone TO 'UTC';

现在,给您的数据库用户访问您创建的数据库的权限:

1GRANT ALL PRIVILEGES ON DATABASE myproject TO myproject_user;

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

1\q

现在你的数据库已经设置,你可以安装Django。

步骤 3 - 在虚拟环境中安装 Django

为了获得更好的灵活性,您将在Python虚拟环境中安装Django及其所有依赖。

您可以获得virtualenv包,允许您通过输入以下命令来创建这些环境:

1sudo pip install virtualenv

接下来,创建一个目录来保留您的Django项目:

1mkdir ~/myproject

然后进入目录:

1cd ~/myproject

现在您可以创建一个虚拟环境来存储我们Django项目的Python要求,如下所示:

1python3 -m virtualenv myprojectenv

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

在在虚拟环境中安装应用程序之前,您必须激活它,您可以通过输入此命令:

1source myprojectenv/bin/activate

您的提示将更改,以表示您现在在虚拟环境中运行,例如: (myprojectenv)user@host:~/myproject$

一旦你的虚拟环境是活跃的,你可以用pip安装Django. 你还会安装psycopg2包,这将允许你使用你配置的数据库:

1pip install Django psycopg2

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

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

1django-admin startproject myproject .

随着 Django 和您的虚拟环境的设置,您可以继续配置 Django 数据库设置。

步骤 4 - 配置 Django 数据库设置

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

使用您喜爱的文本编辑器打开位于儿童项目目录中的主 Django 项目设置文件。

1nano ~/myproject/myproject/settings.py

在文件的底部,有一个DATABASES部分,目前已配置使用SQLite:

 1[label ~/myproject/myproject/settings.py]
 2. . .
 3
 4# Database
 5# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
 6
 7DATABASES = {
 8    'default': {
 9        'ENGINE': 'django.db.backends.sqlite3',
10        'NAME': BASE_DIR / 'db.sqlite3',
11    }
12}
13
14. . .

这需要改变以使用Postgres。

首先,更改引擎,以便它使用postgresql适配器而不是sqlite3后端。对于NAME,使用您的数据库的名称。在本示例中,myproject是数据库的名称。然后添加包含连接的用户名、密码和主机的登录凭证。

 1[label ~/myproject/myproject/settings.py]
 2. . .
 3# Database
 4# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
 5
 6DATABASES = {
 7    'default': {
 8        'ENGINE': 'django.db.backends.postgresql',
 9        'NAME': 'myproject',
10        'USER': 'myproject_user',
11        'PASSWORD': 'myproject_database_password',
12        'HOST': 'localhost',
13        'PORT': '',
14    }
15}
16
17. . .

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

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

您可以添加您的 Django 服务器的域名(域名)和 IP 地址,如下: ALLOWED_HOSTS = [ 'your_domain', '203.0.113.5']. 如果您想回复 your_domain' 和任何子域名,请用一个点开始域名 .: ALLOWED_HOSTS = ['.your_domain', '203.0.113.5'`。

例如,输入您的服务器域或IP地址:

1[label ~/myproject/myproject/settings.py]
2. . .
3
4ALLOWED_HOSTS = ['your_server_domain_or_IP']
5. . .

完成后,保存并关闭文件. 如果您使用nano,请按CTRL+X,然后按y,然后按ENTER

步骤5:迁移数据库并测试您的项目

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

首先,创建并应用迁移到您的数据库,因为您还没有任何数据,这将设置初始的数据库结构。

1cd ~/myproject

然后进行并应用迁移:

1python manage.py makemigrations
2python manage.py migrate

创建数据库结构后,通过输入以下内容创建管理帐户:

1python manage.py createsuperuser

您将被要求选择一个用户名. 您可以放空使用与您的服务器相关联的用户名。 然后提供电子邮件地址创建帐户密码。

在访问 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 22.04 上使用 Postgres, Nginx 和 Gunicorn 设置 Django 的指南(https://andsky.com/tech/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-22-04)。

Published At
Categories with 技术
comments powered by Disqus