介绍
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 帐户返回库存,您将看到css
和img
目录添加到您指向的文件夹中,在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 应用程序的结果。
当你完成测试你的应用程序时,你可以按CTRL
+C
停止runserver
命令,这会让你回到你的编程环境。
当你准备离开你的Python环境时,你可以运行禁用
命令:
1deactivate
停用您的编程环境将使您回到终端命令提示。
结论
在本教程中,您已经成功创建了一个Django应用程序,该应用程序从DigitalOcean Spaces中服务的文件,同时从Python代码中抽取了Spaces凭据。
您可以通过阅读我们在 [Django Development] 上的教程系列继续学习 Python 和 Django 的 Web 开发(https://www.digitalocean.com/community/tutorial_series/django-development)。