如何在 Django 中使用 Python 解耦与 DigitalOcean Spaces

介绍

Python Decouple是一个 Python 库,旨在使开发人员更容易将配置设置与代码分开。

在本教程中,我们将讨论如何安装Python Decouple,以及如何在使用Django的基本应用程序中使用DigitalOcean的对象存储解决方案Spaces。

前提条件

為了適當地準備本教程,您將需要以下幾點:

  • 在 Ubuntu 或 Debian Linux 服务器上设置了sudo特权的非根用户帐户. 如果您尚未设置此功能,请遵循 Ubuntu 16.04 初始服务器设置Debian教程。
  • A DigitalOcean Space 和生成的 API 密钥。

有了初始服务器设置和DigitalOcean空间和API密钥,您已经准备好开始。

步骤1:创建虚拟环境

在我们开始之前,如果你还没有这样做,现在是更新和升级你的服务器的好时机。

1sudo apt-get update && sudo apt-get -y upgrade

您的服务器应该与 Python 3 交付。 运行以下命令来验证它是否已安装:

1sudo apt-get install python3

接下来,让我们安装Pip的Python包管理器。

1sudo apt-get install -y python3-pip

最后,我们需要安装 virtualenv模块,以便我们可以设置我们的编程环境:

1sudo pip3 install virtualenv

有关设置和利用编程环境的进一步指导和信息,请参阅本教程中的 设置虚拟环境

我们现在已经准备好进入我们的Python编程环境。

步骤 2 — 创建 Django 应用程序并安装依赖

接下来,我们必须创建 Django 应用程序并安装所需的依赖性,以便利用 DigitalOcean Spaces 和 Python Decouple。

在服务器的主目录中,我们必须创建包含我们的Django应用程序的目录,运行以下命令来创建名为django-apps的目录,或您选择的其他名称,然后导航到目录。

1mkdir django-apps
2cd django-apps

django-apps目录中,创建你的虚拟环境,让我们称之为env

1virtualenv env

现在,用以下命令激活虚拟环境:

1. env/bin/activate

您将知道它一旦更改前缀为(env),取决于您所在的目录,它将看起来类似于以下:

在环境中,使用 pip 安装 Django 包. 安装 Django 使我们能够创建和运行 Django 应用程序. 有关 Django 的更多信息,请阅读我们在 Django 开发上的教程系列。

1pip install django

现在,让我们使用以下命令创建一个名为mysite的Django项目:

1django-admin startproject mysite

接下来,我们需要安装 Boto 3,用于Python的AWS SDK,这将使我们能够将物体存储解决方案,如DigitalOcean Spaces,与我们的Django应用程序集成。

在写作时,Boto 3与S3具有明确的兼容性。由于Space与S3的互操作性,Spaces也与Boto 3兼容。

运行以下命令来安装 Boto 3:

1pip install boto3

我们还需要安装 django-storages,这是一组针对 Django 和 boto3的自定义存储后端。

1pip install django-storages

最后,让我们安装Python Decouple。

1pip install python-decouple

您已经在 Django 应用程序的环境中设置了依赖性,现在已经准备好设置静态和模板目录。

步骤 3 – 添加目录和资产

随着我们的环境设置了所有依赖性,您现在可以切换到mysite/mysite目录,

1cd ~/django-apps/mysite/mysite

mysite/mysite目录中,运行以下命令来创建静态和模板目录。

1mkdir static && mkdir templates

接下来,我们将创建图像和CSS的子目录,以在静态目录中生活。

1mkdir static/img && mkdir static/css

一旦您创建了目录,我们将下载一个测试文件,我们最终将其添加到我们的对象存储中。

1cd ~/django-apps/mysite/mysite/static/img

在此目录中,我们将使用Wget的wget命令下载DigitalOcean标志图像,这是一个常用的GNU程序,在Ubuntu发行版上预安装,用于从Web服务器上获取内容。

1wget https://assets.digitalocean.com/logos/DO_Logo_icon_blue.png

一旦点击ENTER,您将看到类似于以下的输出:

 1[secondary_label Output]
 2Resolving www.digitalocean.com (www.digitalocean.com)... 104.16.24.4, 104.16.25.4
 3Connecting to www.digitalocean.com (www.digitalocean.com)|104.16.24.4|:443... connected.
 4HTTP request sent, awaiting response... 200 OK
 5Length: 1283 (1.3K) [image/png]
 6Saving to: ‘DO_Logo_icon_blue.png’
 7
 8DO_Logo_icon_blue-6edd7377 100%[=====================================>]   1.25K  --.-KB/s in 0s      
 9
102017-11-05 12:26:24 (9.60 MB/s) - ‘DO_Logo_icon_blue.png’ saved [1283/1283]

在此时,如果运行命令ls,您会注意到名为DO_Logo_icon_blue.png的图像现在存在于静态/img/目录中。

有了这些目录设置和我们将存储的图像下载到服务器,我们可以继续编辑与我们的Django应用程序相关的文件。

步骤 4 – 编辑 CSS 和 HTML 文件

您应该进入css目录,以便我们可以为我们的Web应用添加一个基本的样式。

1cd ~/django-apps/mysite/mysite/static/css

使用 nano 或您选择的其他文本编辑器来编辑文档。

1nano app.css

打开文件后,添加以下 CSS:

 1[label app.css]
 2body {
 3  margin: 0;
 4  background-color: #f1f1f1;
 5  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
 6}
 7
 8.container {
 9  width: 80%;
10  border: 1px solid #ddd;
11  background-color: #fff;
12  padding: 20px;
13  margin: 40px auto;
14}
15
16form {
17  margin-bottom: 20px;
18  padding: 10px;
19  border: 1px solid #ff9900;
20  width: 350px;
21}
22
23table {
24  border-collapse: collapse;
25  width: 100%;
26}
27
28table td,
29table th {
30  border: 1px solid #eceeef;
31  padding: 5px 8px;
32  text-align: left;
33}
34
35table thead {
36  border-bottom: 2px solid #eceeef;
37}

一旦完成,你可以保存和关闭文件。

从这里,导航到模板目录。

1cd ~/django-apps/mysite/mysite/templates

我们需要打开一个名为home.html的文件,并将HTML添加到它中,以便显示我们的基本Web应用程序。

1nano home.html

在文档中,添加以下内容:

 1[label home.html]
 2{% load static %}
 3<!DOCTYPE html>
 4<html>
 5<head>
 6  <meta charset="utf-8">
 7  <title>Spaces + Django Tutorial</title>
 8  <link rel="stylesheet" type="text/css" href="{% static 'css/app.css' %}">
 9</head>
10<body>
11  <center>
12  <header>
13    <h1>Spaces + Django Tutorial</h1>
14  </header>
15  <main>
16    <img src="{% static 'img/DO_Logo_icon_blue.png' %}">
17    <h2>Congratulations, you’re using Spaces!</h2>
18  </main>
19  </center>
20</body>
21</html>

保存并关闭文件. 我们最后更新的文件是 urls.py 文件,以便它指向您新创建的 home.html 文件. 我们需要进入以下目录:

1cd ~/django-apps/mysite/mysite

使用 nano 编辑 urls.py 文件。

1nano urls.py

您可以删除文件中的所有内容,然后添加以下内容:

1[label urls.py]
2from django.conf.urls import url
3from django.views.generic import TemplateView
4
5urlpatterns = [
6    url(r'^$', TemplateView.as_view(template_name='home.html'), name='home'),
7]

随着这些文件的设置,我们可以下一步的工作配置我们的设置,以便与对象存储集成。

步骤 5 — 使用Python解除对抽象空间的凭证

在您的虚拟环境中,导航到settings.py文件的位置,在那里我们将创建settings.ini文件来单独存储您的身份证。

1cd ~/django-apps/mysite/mysite

使用触摸创建settings.ini文件,这是一个Linux命令,在它被呼叫的目录中创建新的空格文件。

1touch settings.ini

正在创建的设置文件将具有.ini 文件扩展. 此文件将由 Python Decouple 查看设置数据,也是您的设置文件将参考 API 密钥的地方。

现在,使用您最喜欢的文本编辑器,如 nano,打开settings.ini文件。

1nano settings.ini

在本文档中,我们将有一个部分标题,即Python Decouple所要求的[设置],并将通过将它们分配到 变量来添加我们的Spaces凭证。

1[label settings.ini]
2[settings]
3SPACES_ACCESS_KEY=your-spaces-access-key
4SPACES_SECRET_ACCESS_KEY=your-spaces-secret-access-key

为了访问这些凭证,我们需要从settings.py文件中引用settings.ini文件。

在下一步,我们将完全配置settings.py文件。

步骤 6 – 更新设置

现在是时候用您的 Spaces 凭证更新您的设置文件,这样我们就可以利用我们已经设置的页面来显示图像。

确保您在正确的位置访问您的设置文件。

1cd ~/django-apps/mysite/mysite

打开文件以编辑 nano 或其他文本编辑器:

1nano settings.py

在文件的顶部,我们需要添加一个 import 声明来使用从 Decouple 的 config 模块。

1[label settings.py]
2...
3import os
4from decouple import config
5...

将文件移动到允许的主机,并添加您的服务器IP。

1[label settings.py]
2...
3ALLOWED_HOSTS = ['your-server-ip']
4...

然后在设置文件的安装应用程序部分添加存储并删除django.contrib.admin,因为我们不会在本教程中使用它。

 1[label settings.py]
 2...
 3# Application definition
 4
 5INSTALLED_APPS = [
 6    'django.contrib.auth',
 7    'django.contrib.contenttypes',
 8    'django.contrib.sessions',
 9    'django.contrib.messages',
10    'django.contrib.staticfiles',
11    'storages'
12]
13...

更换并将突出列出的文本添加到设置文件的TEMPLATES部分,以便项目知道在哪里找到您的home.html文件。

 1[label settings.py]
 2...
 3TEMPLATES = [
 4    {
 5        'BACKEND': 'django.template.backends.django.DjangoTemplates',
 6        'DIRS': [os.path.join(BASE_DIR, 'mysite/templates')],
 7        'APP_DIRS': True,
 8        'OPTIONS': {
 9            'context_processors': [
10                'django.template.context_processors.debug',
11                'django.template.context_processors.request',
12                'django.contrib.auth.context_processors.auth',
13                'django.contrib.messages.context_processors.messages',
14            ],
15        },
16    },
17]
18...

最后,让我们在文件底部更新您的设置. 我们将在#静态文件部分下方添加以下内容. 第一两个行添加了对settings.ini文件的参考,以便它可以检索配置参数。

在写作时,NYC3是目前Spaces所在的唯一区域,所以它正在作为终端URL传输。

对于终端位置,添加您想要导入文件的目录,您可以通过浏览器中的 Spaces 界面添加目录。

 1[label settings.py]
 2...
 3# Static files (CSS, JavaScript, Images)
 4# https://docs.djangoproject.com/en/1.11/howto/static-files/
 5
 6AWS_ACCESS_KEY_ID = config('SPACES_ACCESS_KEY')
 7AWS_SECRET_ACCESS_KEY = config('SPACES_SECRET_ACCESS_KEY')
 8AWS_STORAGE_BUCKET_NAME = 'your-storage-bucket-name'
 9AWS_S3_ENDPOINT_URL = 'https://nyc3.digitaloceanspaces.com'
10AWS_S3_OBJECT_PARAMETERS = {
11    'CacheControl': 'max-age=86400',
12}
13AWS_LOCATION = 'your-spaces-files-folder'
14
15STATICFILES_DIRS = [
16    os.path.join(BASE_DIR, 'mysite/static'),
17]
18STATIC_URL = 'https://%s/%s/' % (AWS_S3_ENDPOINT_URL, AWS_LOCATION)
19STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

现在我们已经从Python代码中抽取了我们的Spaces凭据,我们的设置文件已经准备好将我们的Django应用程序与对象存储集成。

让我们运行Django Web应用程序来验证一切已正确设置。

步骤 7 – 收集静态文件

现在我们将运行collectstatic,你会注意到正在传输的文件,包括我们在我们的静态目录中保存的图像。

要做到这一点,让我们导航到 ~/django-apps/mysite/ :

1cd ~/django-apps/mysite

在目录中,运行以下命令:

1python manage.py collectstatic

您将看到以下输出,并应在提示时回答

1[secondary_label Output]
2You have requested to collect static files at the destination
3location as specified in your settings.
4
5This will overwrite existing files!
6Are you sure you want to do this?
7
8Type 'yes' to continue, or 'no' to cancel:

然后你会看到更多的输出告诉你文件已被复制到空间。

1[secondary_label Output]
2Copying '/root/django-apps/mysite/mysite/static/css/app.css'
3
41 static file copied, 1 unmodified.

在此时,如果您从您的 DigitalOcean Cloud 帐户返回库存,您将看到cssimg目录添加到您指向的文件夹中,在css目录中app.css,在img目录中DO-Logo_icon_blue-.png图像。

步骤 8 - 运行应用程序

如果您已设置 UFW 防火墙,请先通过发出以下命令允许输入流量通过端口 8000:

1sudo ufw allow 8000

随着您的虚拟环境仍然激活,让我们导航到manage.py文件的位置并运行应用程序,使用以下命令:

1cd ~/django-apps/mysite
2python manage.py runserver <your-server-ip>:8000

在 Web 浏览器中,导航到 http://your-server-ip:8000 以查看您创建的 Django 应用程序的结果。

DigitalOcean Spaces Django and Python Decouple Example App

当你完成测试你的应用程序时,你可以按CTRL +C停止runserver命令,这会让你回到你的编程环境。

当你准备离开你的Python环境时,你可以运行禁用命令:

1deactivate

停用您的编程环境将使您回到终端命令提示。

结论

在本教程中,您已经成功创建了一个Django应用程序,该应用程序从DigitalOcean Spaces中服务的文件,同时从Python代码中抽取了Spaces凭据。

您可以通过阅读我们在 [Django Development] 上的教程系列继续学习 Python 和 Django 的 Web 开发(https://www.digitalocean.com/community/tutorial_series/django-development)。

Published At
Categories with 技术
comments powered by Disqus