Как использовать Python Decouple с пространствами DigitalOcean в Django

Вступление

Python Decouple - это библиотека Python, призванная упростить разработчикам разделение их параметров конфигурации от кода. Изначально разработанный для Django, теперь это универсальный инструмент Python для хранения параметров и определения постоянных значений отдельно от вашего кода.

В этом уроке мы рассмотрим, как установить Python Decouple и как использовать его в базовом приложении Django, использующем решение для хранения объектов DigitalOcean, Spaces.

Предпосылки

Для адекватной подготовки к этому уроку вам понадобится следующее:

  • Учетная запись пользователя без полномочий root с правами + sudo +, настроенная на сервере Ubuntu или Debian Linux. Если вы еще не настроили это, следуйте https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 настроить начальный сервер для Ubuntu 16.04] или https: //www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-8[Debian] учебник.

  • Пространство DigitalOcean и сгенерированный ключ API. Чтобы получить рекомендации по этому вопросу, вы можете следовать этому https://www.digitalocean.com/community/tutorials/how-to-create-a-digitalocean-space-and-api-key[tutorial для создания пространства и настройки Ключ API.

С первоначальной настройкой сервера и ключом DigitalOcean Space и API вы готовы к работе.

Шаг 1 - настройка виртуальной среды

Прежде чем мы начнем, если вы еще этого не сделали, сейчас самое время обновить и обновить ваш сервер.

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

Ваш сервер должен был поставляться с Python 3. Выполните следующую команду, чтобы убедиться, что она установлена:

sudo apt-get install python3

Далее давайте установим pip менеджера пакетов для Python.

sudo apt-get install -y python3-pip

Наконец, нам нужно установить модуль * virtualenv *, чтобы мы могли настроить нашу среду программирования:

sudo pip3 install virtualenv

Для получения дополнительных руководств и информации о настройке и использовании сред программирования, ознакомьтесь с этим руководством по адресу https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a. -programming-environment-on-an-ubuntu-16-04-server [настройка виртуальной среды].

Теперь мы готовы перейти к нашей среде программирования Python.

Шаг 2 - Создание приложения Django и установка зависимостей

Затем мы должны создать приложение Django и установить необходимые зависимости, чтобы использовать DigitalOcean Spaces и Python Decouple.

Находясь в домашнем каталоге сервера, мы должны создать каталог, в котором будет находиться наше приложение Django. Выполните следующую команду, чтобы создать каталог с именем или другим именем по вашему выбору. Затем перейдите в каталог.

mkdir
cd

Находясь внутри каталога, создайте свою виртуальную среду. Давайте назовем это.

virtualenv

Теперь активируйте виртуальную среду с помощью следующей команды:

. env/bin/activate

Вы узнаете, что он активируется после изменения префикса, который будет выглядеть примерно так в зависимости от того, в каком каталоге вы находитесь:

В среде установите пакет Django, используя pip. Установка Django позволяет нам создавать и запускать приложения Django. Чтобы узнать больше о Django, прочитайте нашу серию руководств на Django Development.

pip install django

Теперь давайте создадим проект Django, который вызывается с помощью следующей команды:

django-admin startproject

Затем нам нужно установить Boto 3, AWS SDK для Python, который позволит нам интегрировать решения для хранения объектов, такие как DigitalOcean Spaces, с нашим приложением Django.

На момент написания Boto 3 имел явную совместимость с S3. Благодаря совместимости Space с S3, Spaces также совместим с Boto 3. Подробнее о сравнении хранилищ объектов Amazon S3 и DigitalOcean Spaces читайте в Spaces docs.

Выполните следующую команду для установки Boto 3:

pip install boto3

Нам также нужно установить * https: //django-storages.readthedocs.io/en/latest/ [django-storages] *, набор пользовательских хранилищ для Django и * boto3 *.

pip install django-storages

Наконец, давайте установим Python Decouple **.

pip install python-decouple

Вы настроили свои зависимости в среде вашего приложения Django и теперь готовы установить статические и шаблонные каталоги.

Шаг 3 - Добавление каталогов и активов

Теперь, когда наша среда настроена со всеми зависимостями, вы можете переключиться в каталог + mysite / mysite +,

cd ~/django-apps/mysite/mysite

В каталоге + mysite / mysite + выполните следующие команды, чтобы создать каталоги static и template.

mkdir static && mkdir templates

Затем мы создадим подкаталоги для изображений и CSS, которые будут жить в каталоге + static +.

mkdir static/img && mkdir static/css

После создания каталогов мы загрузим тестовый файл, который в конечном итоге добавим в хранилище наших объектов. Переключитесь в каталог + img +, так как мы будем загружать изображение.

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

В этом каталоге мы загрузим изображение логотипа DigitalOcean с помощью команды Wget + wget +. Это широко используемая программа GNU, предустановленная в дистрибутивах Ubuntu, для извлечения контента с веб-серверов.

wget http://assets.digitalocean.com/logos/DO_Logo_icon_blue.png

Как только вы нажмете + ENTER +, вы увидите вывод, подобный следующему:

OutputResolving www.digitalocean.com (www.digitalocean.com)... 104.16.24.4, 104.16.25.4
Connecting to www.digitalocean.com (www.digitalocean.com)|104.16.24.4|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1283 (1.3K) [image/png]
Saving to: ‘DO_Logo_icon_blue.png’

DO_Logo_icon_blue-6edd7377 100%[=====================================>]   1.25K  --.-KB/s    in 0s

2017-11-05 12:26:24 (9.60 MB/s) - ‘DO_Logo_icon_blue.png’ saved [1283/1283]

На этом этапе, если вы запустите команду + ls +, вы заметите, что изображение с именем + DO_Logo_icon_blue.png + теперь существует в каталоге + static / img / +.

После установки этих каталогов и загрузки изображения, которое мы будем хранить на сервер, мы можем перейти к редактированию файлов, связанных с нашим приложением Django.

Шаг 4 - Редактирование CSS и HTML файлов

Начнем с редактирования таблицы стилей. Вы должны перейти в каталог + css +, чтобы мы могли добавить базовую таблицу стилей для нашего веб-приложения.

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

Для редактирования документа используйте nano или другой текстовый редактор по вашему выбору.

nano app.css

Когда файл откроется, добавьте следующий CSS:

app.css

body {
 margin: 0;
 background-color: #f1f1f1;
 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}

.container {
 width: 80%;
 border: 1px solid #ddd;
 background-color: #fff;
 padding: 20px;
 margin: 40px auto;
}

form {
 margin-bottom: 20px;
 padding: 10px;
 border: 1px solid #ff9900;
 width: 350px;
}

table {
 border-collapse: collapse;
 width: 100%;
}

table td,
table th {
 border: 1px solid #eceeef;
 padding: 5px 8px;
 text-align: left;
}

table thead {
 border-bottom: 2px solid #eceeef;
}

Как только вы закончите, вы можете сохранить и закрыть файл.

Отсюда перейдите в каталог + templates.

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

Нам нужно открыть файл с именем + home.html + и добавить в него HTML для отображения нашего основного веб-приложения. Используя nano, откройте файл, чтобы он был готов для редактирования:

nano home.html

В документе добавьте следующее:

home.html

{% load static %}
<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>Spaces + Django Tutorial</title>
 <link rel="stylesheet" type="text/css" href="{% static 'css/app.css' %}">
</head>
<body>
 <center>
 <header>
   <h1>Spaces + Django Tutorial</h1>
 </header>
 <main>
   <img src="{% static 'img/DO_Logo_icon_blue.png' %}">
   <h2>Congratulations, you’re using Spaces!</h2>
 </main>
 </center>
</body>
</html>

Сохраните и закройте файл. Последний файл, который мы обновим, это файл + urls.py +, так что он указывает на ваш недавно созданный файл + home.html +. Нам нужно перейти в следующий каталог:

cd ~/django-apps/mysite/mysite

Используйте nano для редактирования файла urls.py.

nano urls.py

Вы можете удалить все в файле, а затем добавить следующее:

urls.py

from django.conf.urls import url
from django.views.generic import TemplateView


urlpatterns = [
   url(r'^$', TemplateView.as_view(template_name='home.html'), name='home'),
]

После настройки этих файлов мы можем затем приступить к настройке наших параметров для интеграции с хранилищем объектов.

Шаг 5 - Используйте развязку Python для абстрактных учетных данных пробелов

В вашей виртуальной среде перейдите к расположению файла + settings.py +. Здесь мы создадим файл + settings.ini + для хранения ваших учетных данных отдельно.

cd ~/django-apps/mysite/mysite

Создайте файл + settings.ini +, используя + touch +, команду Linux, которая создает новые пустые файлы в каталоге, из которого он вызывается.

touch settings.ini

Созданный файл настроек будет иметь расширение файла. Этот файл будет проверен Python Decouple для получения данных о настройках, а также там, где ваш файл настроек будет ссылаться на ключ API. Вы также можете использовать в качестве альтернативного расширения.

Теперь откройте файл, используя ваш любимый текстовый редактор, например, nano.

nano settings.ini

В этом документе у нас будет заголовок раздела + [settings] +, требуемый для Python Decouple, и мы добавим наши учетные данные Spaces, назначив их на https://www.digitalocean.com/community/tutorials/how. -в-использование-переменные-в-питон-3 [переменные]. Ваш полный файл должен выглядеть следующим образом:

settings.ini

[settings]
SPACES_ACCESS_KEY=
SPACES_SECRET_ACCESS_KEY=

Чтобы получить доступ к этим учетным данным, нам нужно обратиться к файлу + settings.ini из файла` + settings.py`.

На следующем шаге мы полностью настроим файл + settings.py +.

Шаг 6 - Обновление настроек

Теперь пришло время обновить файл настроек с помощью учетных данных Spaces, чтобы мы могли воспользоваться страницей, которую мы настроили, для отображения изображения.

Убедитесь, что вы находитесь в правильном месте для доступа к файлу настроек.

cd ~/django-apps/mysite/mysite

Откройте файл для редактирования с помощью nano или другого текстового редактора:

nano settings.py

В верхней части файла нам нужно добавить https://www.digitalocean.com/community/tutorials/how-to-import-modules-in-python-3 [+ import + Statement] по порядку использовать модуль конфигурации из Decouple.

settings.py

...
import os

...

Переместитесь вниз в файле к разрешенным хостам и добавьте IP вашего сервера.

settings.py

...
ALLOWED_HOSTS = ['']
...

Затем добавьте + storages + в раздел установленных приложений в файле настроек и удалите + django.contrib.admin +, так как мы не будем использовать это в этом руководстве. Это должно выглядеть следующим образом.

settings.py

...
# Application definition

INSTALLED_APPS = [
   'django.contrib.auth',
   'django.contrib.contenttypes',
   'django.contrib.sessions',
   'django.contrib.messages',
   'django.contrib.staticfiles',

]
...

Замените и добавьте выделенный текст в раздел + TEMPLATES + файла настроек, чтобы проект знал, где найти файл + home.html +.

settings.py

...
TEMPLATES = [
   {
       'BACKEND': 'django.template.backends.django.DjangoTemplates',
       'DIRS': [],
       'APP_DIRS': True,
       'OPTIONS': {
           'context_processors': [
               'django.template.context_processors.debug',
               'django.template.context_processors.request',
               'django.contrib.auth.context_processors.auth',
               'django.contrib.messages.context_processors.messages',
           ],
       },
   },
]
...

Наконец, давайте обновим ваши настройки внизу файла. Мы добавим следующее под разделом «+ # Статические файлы +». Первые две строки добавляют ссылку на файл, чтобы он мог получить параметры конфигурации.

Ниже этого обязательно добавьте свое собственное имя корзины. На момент написания, NYC3 является единственным регионом, где в настоящее время находятся пробелы, поэтому он передается в качестве URL-адреса конечной точки.

В качестве местоположения терминала добавьте каталог, в который вы хотите импортировать ваши файлы. Вы можете добавить каталог через интерфейс Spaces в браузере.

settings.py

...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

AWS_ACCESS_KEY_ID = config('SPACES_ACCESS_KEY')
AWS_SECRET_ACCESS_KEY = config('SPACES_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = ''
AWS_S3_ENDPOINT_URL = 'https://nyc3.digitaloceanspaces.com'
AWS_S3_OBJECT_PARAMETERS = {
   'CacheControl': 'max-age=86400',
}
AWS_LOCATION = ''

STATICFILES_DIRS = [
   os.path.join(BASE_DIR, 'mysite/static'),
]
STATIC_URL = 'https://%s/%s/' % (AWS_S3_ENDPOINT_URL, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

Теперь мы абстрагировали наши учетные данные Spaces от кода Python, и наш файл настроек готов к интеграции нашего приложения Django с хранилищем объектов.

Давайте запустим веб-приложение Django, чтобы убедиться, что все настроено правильно.

Шаг 7 - Сбор статических файлов

Теперь мы запустим + collectstatic +, и вы заметите, что передаются файлы, включая изображение, которое мы сохранили в нашем статическом каталоге. Он будет перенесен в место Spaces, которое мы определили в файле настроек.

Для этого перейдем к + ~ / django-apps / mysite / +:

cd ~/django-apps/mysite

В каталоге выполните следующую команду:

python manage.py collectstatic

Вы увидите следующий вывод и должны ответить + yes +, когда будет предложено.

OutputYou have requested to collect static files at the destination
location as specified in your settings.

This will overwrite existing files!
Are you sure you want to do this?

Type 'yes' to continue, or 'no' to cancel:

Затем вы увидите еще один вывод о том, что файл был скопирован в пробелы.

OutputCopying '/root/django-apps/mysite/mysite/static/css/app.css'

1 static file copied, 1 unmodified.

На этом этапе, если вы вернетесь к своему ведру из учетной записи DigitalOcean Cloud, вы увидите каталоги + css + и + img +, добавленные в папку, на которую вы указали, с + app.css + в ` каталог + css + и изображение + DO-Logo_icon_blue-.png + в каталоге + img + `.

Шаг 8 - Запустите приложение

Если у вас настроен брандмауэр UFW, сначала разрешите входящему трафику проходить через порт 8000, введя следующую команду:

sudo ufw allow 8000

Если ваша виртуальная среда по-прежнему активирована, перейдем к расположению файла и запустите приложение, используя следующие команды:

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

В веб-браузере перейдите на http: //: 8000, чтобы увидеть результат созданного вами приложения Django. Вы увидите следующий вывод в вашем браузере:

image: https: //assets.digitalocean.com/articles/eng_python/django/python-decouple-spaces.png [Пример приложения DigitalOcean Spaces Django и Python Decouple]

Когда вы закончите тестирование своего приложения, вы можете нажать + CTRL + + + C +, чтобы остановить команду + runserver +. Это вернет вас в среду программирования.

Когда вы будете готовы покинуть среду Python, вы можете запустить команду + deactivate +:

deactivate

Деактивация среды программирования вернет вас в командную строку терминала.

Заключение

В этом руководстве вы успешно создали приложение Django, которое обслуживает файлы из DigitalOcean Spaces, абстрагируя учетные данные Spaces от кода Python. В процессе вы узнали о статических файлах, о том, как управлять статическими файлами, как обслуживать их из облачной службы и как отделить параметры конфигурации от файла настроек python.

Вы можете продолжить изучение веб-разработки с использованием Python и Django, прочитав нашу серию учебных пособий на Django Development.

Related