介绍
Django 是一个灵活的框架,可以快速创建 Python 应用程序. 默认情况下,Django 应用程序被配置为将数据存储在轻量级的 SQLite 数据库文件中。
在本指南中,我们将展示如何安装和配置PostgreSQL以与您的Django应用程序一起使用,我们将安装必要的软件,为我们的应用程序创建数据库凭据,然后启动并配置一个新的Django项目以使用这个后端。
前提条件
要开始,您需要一个清洁的 CentOS 7 服务器实例,并设置了非根用户。非根用户必须配置有sudo
特权。 请了解如何通过遵循我们的 初始服务器设置指南来设置此功能。
当你准备好继续阅读时,继续阅读。
安装 CentOS 和 EPEL 存储库的组件
我们的第一步将是从库中安装我们需要的所有零件,我们将安装Python包管理器pip
,以便安装和管理我们的Python组件,我们还将安装数据库软件和相关库,以便与它们进行交互。
我们需要的一些软件位于包含额外包的 EPEL 存储库中,我们可以通过绑定来轻松启用此存储库:
1sudo yum install epel-release
通过启用EPEL,我们可以通过键入安装所需的组件:
1sudo yum install python-pip python-devel gcc postgresql-server postgresql-devel postgresql-contrib
执行初始 PostgreSQL 配置
安装后,您需要通过键入开始 PostgreSQL 数据库:
1sudo postgresql-setup initdb
数据库初始化后,我们可以通过键入开始 PostgreSQL 服务:
1sudo systemctl start postgresql
随着数据库的启动,我们实际上需要调整已拥有的配置文件中的值。 使用您的编辑器和sudo
命令现在打开文件:
1sudo nano /var/lib/pgsql/data/pg_hba.conf
此文件负责为数据库系统配置身份验证方法。目前,它已配置为仅在系统用户匹配数据库用户时允许连接。
我们可以通过修改文件底部的两个主机
行来配置此功能,更改最后一列(身份验证方法)为md5
。
1. . .
2
3# TYPE DATABASE USER ADDRESS METHOD
4
5# "local" is for Unix domain socket connections only
6local all all peer
7# IPv4 local connections:
8#host all all 127.0.0.1/32 ident
9host all all 127.0.0.1/32 md5
10# IPv6 local connections:
11#host all all ::1/128 ident
12host all all ::1/128 md5
完成后,保存并关闭文件。
随着我们新的配置变化,我们需要重新启动服务,我们还将启用PostgreSQL,以便它在启动时自动启动:
1sudo systemctl restart postgresql
2sudo systemctl enable postgresql
创建数据库和数据库用户
默认情况下,Postgres 使用一个名为对等身份验证
的身份验证方案,用于本地连接,我们可以看到我们编辑的pg_hba.conf
文件中的本地
条目。 基本上,这意味着如果用户的操作系统用户名与有效的 Postgres 用户名匹配,则该用户可以无需进一步身份验证登录。
在 Postgres 安装过程中,创建了一个名为 postgres
的操作系统用户,以匹配 postgres
的 PostgreSQL 管理用户。
1sudo su - postgres
您现在应该是postgres
用户的壳会话. 通过键入登录到Postgres会话:
1psql
首先,我们将为我们的Django项目创建一个数据库. 每一个项目都应该有自己的孤立数据库,出于安全原因. 在本指南中,我们将我们的数据库称为myproject
,但最好选择一些更为描述性的内容:
1CREATE DATABASE myproject;
请记住,在 SQL 提示中用半色符号结束所有命令。
接下来,我们将创建一个数据库用户,我们将使用它来连接和与数据库互动。
1CREATE USER myprojectuser WITH PASSWORD 'password';
之后,我们将对我们刚刚创建的用户修改一些连接参数,这将加快数据库操作,以便每次建立连接时不需要查询和设置正确的值。
我们正在将默认编码设置为 UTF-8,这也是 Django 所期望的。我们还将默认的交易隔离方案设置为读取承诺
,即从未承诺的交易中读取块。
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';
现在,我们需要做的就是给我们的数据库用户访问我们创建的数据库的权利:
1GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
退出 SQL 提示,返回 postgres 用户的壳会话:
1\q
退出postgres
用户的壳会话以返回正常用户的壳会话:
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$
。
一旦你的虚拟环境是活跃的,你可以安装Django用pip
。我们还将安装psycopg2
包,这将使我们能够使用我们配置的数据库:
1pip install django psycopg2
我们现在可以在我们的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. . .
目前已配置使用 SQLite 作为数据库,我们需要更改,以便使用我们的 PostgreSQL 数据库。
首先,更改引擎,以便它指向postgresql_psycopg2
后端而不是sqlite3
后端。对于NAME
,使用您的数据库的名称(在我们的示例中myproject
)我们还需要添加登录凭证。我们需要用户名、密码和主机连接到。我们将添加和空放端口选项,以便选择默认:
1. . .
2
3DATABASES = {
4 'default': {
5 'ENGINE': 'django.db.backends.postgresql_psycopg2',
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
您应该看到默认索引页面:
添加/admin
到URL的尽头,你应该能够访问登录屏幕到管理员界面:
输入你刚刚使用createsuperuser
命令创建的用户名和密码,然后你将被带到管理员界面:
完成调查后,您可以通过在终端窗口中按 CTRL-C 来阻止开发服务器。
通过访问管理员界面,我们确认我们的数据库存储了我们的用户帐户信息,并且可以适当访问。
结论
在本指南中,我们展示了如何安装和配置 PostgreSQL 作为 Django 项目的后端数据库.虽然 SQLite 可以在开发和轻量生产使用期间轻松处理负载,但大多数项目都受益于实施更具功能的 DBMS。