介绍Django是一个用于快速创建Python应用程序的灵活框架。默认情况下,Django应用程序配置为将数据存储到轻量级SQLite数据库文件中。虽然这在某些负载下运行良好,但更传统的DBMS可以提高生产性能。 在本教材中,我们将演示如何安装和配置PostgreSQL和Django。我们将安装必要的软件,为我们的应用程序创建数据库实例,然后启动并配置一个新的Django项目以使用此后端。您也可以直接使用腾讯云数据库PostgreSQL ,为了让您更好的了解并使用云数据库 PostgreSQL,腾讯云提供了云数据库PostgreSQL 的API文档和操作实例。 准备具有sudo权限的非root用户的Debian 8,没有服务器的同学可以在这里购买。 从Debian存储库安装组件我们的第一步是从存储库安装我们需要的所有部分。我们将安装 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会话: $ sudo -u postgres psql 首先,我们将为Django项目创建一个数据库。出于安全原因,每个项目都应该有自己独立的数据库。我们将在本教程中调用我们的数据库
postgres=# CREATE DATABASE myproject; CREAT DATABASE 接下来,我们将创建一个数据库用户,我们将用它来连接数据库并与之交互。将密码设置为强大且安全的密码: postgres=# CREATE USER myprojectuser WITH PASSWORD 'password'; CREATE ROLE 接下来,我们将为刚刚创建的用户修改一些连接参数。这将加速数据库操作,因为每次建立连接时都不必查询和设置正确的值。 我们将默认编码设置为UTF-8,这是Django期望的格式。我们还将默认事务隔离方案设置为“read committed”,它阻止从未提交的事务中读取。最后,我们正在设定时区。默认情况下,我们的Django项目将设置为使用UTC。 postgres=# ALTER ROLE myprojectuser SET client_encoding TO 'utf8'; postgres=# ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed'; postgres=# ALTER ROLE myprojectuser SET timezone TO 'UTC'; ALTER ROLE ALTER ROLE ALTER ROLE 现在,我们需要做的就是为我们创建的数据库提供数据库用户访问权限: postgres=# GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser; GRANT 完成后退出SQL提示符。 postgres=# \q 您现在应该回到之前的shell会话。 在虚拟环境中安装Django现在我们的数据库已经建立,我们可以安装Django。为了更好的灵活性,我们将在Python虚拟环境中安装Django及其所有依赖项。 如果您使用的是Python 2,则可以输入以下命令安装正确的软件包: $ sudo pip install virtualenv 如果您使用的是Python 3,则可以输入以下命令安装正确的软件包: $ sudo pip3 install virtualenv 制作并移动到一个目录来保存您的Django项目: $ mkdir ~/myproject $ cd ~/myproject 我们可以通过输入以下内容创建一个虚拟环境来存储我们的Django项目的Python需求: $ virtualenv venv 这会将Python的本地副本和本地pip命令安装到项目目录中名为venv的目录中。 在我们在虚拟环境中安装应用程序之前,我们需要激活它。您可以输入以下命令: $ source venv/bin/activate 您的提示将更改为表示您现在正在虚拟环境中运行。 它看起来像这样 一旦您的虚拟环境处于活动状态,您就可以用pip安装Django。我们还将安装
(venv) $ pip install django psycopg2 我们现在可以在我们的myproject目录中启动Django项目。这将创建一个同名的子目录来保存代码本身,并将在当前目录中创建一个管理脚本:
(venv) $ django-admin.py startproject myproject . 您当前的目录结构应如下所示: . └── ./myproject/ ├── manage.py ├── myproject/ │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── venv/ └── . . . 如您所见,我们有一个父项目目录,其中包含 配置Django数据库设置现在我们有了一个项目,我们需要配置它以使用我们创建的数据库。 打开位于子项目目录中的主要的Django项目设置文件: (venv) $ nano ~/myproject/myproject/settings.py 在我们设置数据库之前,您可能还需要调整 在方括号中,列出与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', . . .] 接下来,找到如下所示的DATABASES部分:
. . . DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } . . . 这当前配置为使用SQLite作为数据库。我们需要更改它,以便使用我们的PostgreSQL数据库。 首先,更改引擎,使其使用
. . . DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'myproject', 'USER': 'myprojectuser', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', } } . . . 完成后,保存并关闭文件。 迁移数据库并测试您的项目现在配置了Django设置,我们可以将数据结构迁移到数据库并测试服务器。 我们可以从创建和应用迁移到我们的数据库开始。由于我们还没有任何实际数据,这只是设置初始数据库结构: (venv) $ cd ~/myproject (venv) $ ./manage.py makemigrations (venv) $ ./manage.py migrate 创建数据库结构后,我们可以通过输入以下内容来创建管理帐户: (venv) $ ./manage.py createsuperuser 系统将要求您选择用户名,提供电子邮件地址,然后选择并确认该帐户的密码。
如果您正在运行ufw防火墙,可以通过输入以下命令打开相应的端口: (venv) $ sudo ufw allow 8000 如果您运行的是iptables防火墙,则所需的确切命令取决于您当前的防火墙配置。对于大多数配置,此命令应该起作用: (venv) $ sudo iptables -I INPUT -p tcp --dport 8000 -j ACCEPT 接下来,您可以通过启动Django开发服务器来测试您的数据库是否正常运行: (venv) $ ./manage.py runserver 0.0.0.0:8000 在Web浏览器中,访问服务器的域名或IP地址,然后通过:8000访问默认的Django根页面: http://server_domain_or_IP:8000 您应该看到默认索引页面: 附加/admin到URL的末尾,您应该能够访问管理界面的登录屏幕: 使用createsuperuser命令输入刚刚创建的用户名和密码。然后,您将进入管理界面: 完成调查后,可以通过在终端窗口中按 通过访问管理界面,我们已确认我们的数据库已存储了我们的用户帐户信息,并且可以对其进行适当访问。 我们可以通过使用psql客户端查询Postgres数据库本身来进一步验证这一点。 例如,我们可以使用项目的用户(myprojectuser)连接到我们的项目数据库(myproject),并通过输入以下内容打印出所有可用的表: (venv) $ psql -W myproject myprojectuser -h 127.0.0.1 -f <(echo '\dt') -W标志使psql提示您输入适当的密码。我们必须明确使用-h标志通过网络连接到localhost,以指示我们要使用密码身份验证而不是对等身份验证。我们使用-f标志传递我们想要执行的psql元命令,\ dt,它列出了数据库中的所有表: List of relations Schema | Name | Type | Owner --------+----------------------------+-------+--------------- public | auth_group | table | myprojectuser public | auth_group_permissions | table | myprojectuser public | auth_permission | table | myprojectuser public | auth_user | table | myprojectuser public | auth_user_groups | table | myprojectuser public | auth_user_user_permissions | table | myprojectuser public | django_admin_log | table | myprojectuser public | django_content_type | table | myprojectuser public | django_migrations | table | myprojectuser public | django_session | table | myprojectuser (10 rows) 如您所见,Django在我们的数据库中创建了一些表,确认我们的设置是有效的。 结论在本教程中,我们演示了如何安装和配置PostgreSQL作为Django项目的后端数据库。虽然SQLite可以轻松地处理开发和轻量级生产使用期间的负载,但大多数项目都可以从实现功能更全面的DBMS中受益。
|
|