Verwendung von Python Decouple mit DigitalOcean-Räumen in Django

Einführung

Python Decouple ist eine Python-Bibliothek, mit der Entwickler ihre Konfigurationseinstellungen einfacher vom Code trennen können. Ursprünglich für Django entwickelt, ist es jetzt ein generisches Python-Tool zum Speichern von Parametern und Definieren von Konstantenwerten, die von Ihrem Code getrennt sind.

In diesem Tutorial erfahren Sie, wie Sie Python Decouple installieren und in einer Django-Basisanwendung mit der Objektspeicherlösung Spaces von DigitalOcean verwenden.

Voraussetzungen

Um auf dieses Tutorial ausreichend vorbereitet zu sein, benötigen Sie Folgendes:

  • Ein Nicht-Root-Benutzerkonto mit "+ sudo +" - Berechtigungen, das auf einem Ubuntu- oder Debian-Linux-Server eingerichtet wurde. Wenn Sie dies noch nicht eingerichtet haben, folgen Sie den initial server setup for Ubuntu 16.04 oder https: //www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-8[Debian] Tutorial.

  • Ein DigitalOcean Space und ein generierter API-Schlüssel. Eine Anleitung dazu finden Sie unter https://www.digitalocean.com/community/tutorials/anleitungen zum Erstellen eines Space und zum Einrichten des API-Schlüssel].

Mit einer ersten Serverkonfiguration und einem DigitalOcean Space- und API-Schlüssel können Sie loslegen.

Schritt 1 - Einrichten einer virtuellen Umgebung

Bevor wir beginnen, ist jetzt ein guter Zeitpunkt, um Ihren Server zu aktualisieren und zu aktualisieren, sofern Sie dies noch nicht getan haben.

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

Ihr Server sollte mit Python 3 ausgeliefert worden sein. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob er installiert ist:

sudo apt-get install python3

Als nächstes installieren wir den Paketmanager für Python.

sudo apt-get install -y python3-pip

Schließlich müssen wir das * virtualenv * -Modul installieren, damit wir unsere Programmierumgebung einrichten können:

sudo pip3 install virtualenv

Weitere Anleitungen und Informationen zum Einrichten und Verwenden von Programmierumgebungen finden Sie in diesem Lernprogramm unter https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a -Programmierumgebung-auf-einem-Ubuntu-16-04-Server [Einrichten einer virtuellen Umgebung].

Wir sind jetzt bereit, in unsere Python-Programmierumgebung einzusteigen.

Schritt 2 - Django App erstellen und Abhängigkeiten installieren

Als nächstes müssen wir die Django-App erstellen und die erforderlichen Abhängigkeiten installieren, um DigitalOcean Spaces und Python Decouple nutzen zu können.

Im Home-Verzeichnis des Servers müssen wir das Verzeichnis erstellen, in dem sich unsere Django-Anwendung befindet. Führen Sie den folgenden Befehl aus, um ein Verzeichnis mit dem Namen oder einen anderen Namen Ihrer Wahl zu erstellen. Navigieren Sie dann zu dem Verzeichnis.

mkdir
cd

Erstellen Sie im Verzeichnis Ihre virtuelle Umgebung. Nennen wir es

virtualenv

Aktivieren Sie nun die virtuelle Umgebung mit dem folgenden Befehl:

. env/bin/activate

Sie werden wissen, dass es aktiviert ist, sobald das Präfix in geändert wird. Je nachdem, in welchem ​​Verzeichnis Sie sich befinden, sieht es folgendermaßen aus:

Installieren Sie in der Umgebung das Django-Paket mit pip. Durch die Installation von Django können wir Django-Anwendungen erstellen und ausführen. Um mehr über Django zu erfahren, lesen Sie unsere Tutorial-Reihe unter Django Development.

pip install django

Jetzt erstellen wir ein Django-Projekt mit dem folgenden Befehl:

django-admin startproject

Als Nächstes müssen wir Boto 3 installieren, ein AWS SDK für Python, mit dem wir Objektspeicherlösungen wie DigitalOcean Spaces in unsere Django-Anwendung integrieren können.

Zum Zeitpunkt des Schreibens ist Boto 3 ausdrücklich mit S3 kompatibel. Aufgrund der Interoperabilität von Space mit S3 ist Spaces auch mit Boto 3 kompatibel. Weitere Informationen zu den Vergleichen zwischen Amazon S3 und DigitalOcean Spaces-Objektspeicher finden Sie in den Spaces docs.

Führen Sie den folgenden Befehl aus, um Boto 3 zu installieren:

pip install boto3

Wir müssen auch * https: //django-storages.readthedocs.io/en/latest/ [django-storages] * installieren, eine Sammlung von benutzerdefinierten Speicher-Backends für Django und * boto3 *.

pip install django-storages

Zum Schluss installieren wir Python Decouple **.

pip install python-decouple

Sie haben Ihre Abhängigkeiten in der Umgebung Ihrer Django-App eingerichtet und können nun statische Verzeichnisse und Vorlagenverzeichnisse einrichten.

Schritt 3 - Verzeichnisse und Assets hinzufügen

Wenn unsere Umgebung mit allen Abhängigkeiten eingerichtet ist, können Sie jetzt in das Verzeichnis "+ mysite / mysite +" wechseln.

cd ~/django-apps/mysite/mysite

Führen Sie im Verzeichnis "+ mysite / mysite +" die folgenden Befehle aus, um das statische Verzeichnis und das Vorlagenverzeichnis zu erstellen.

mkdir static && mkdir templates

Als Nächstes erstellen wir die Unterverzeichnisse für Bilder und CSS, die im Verzeichnis "+ static +" gespeichert werden sollen.

mkdir static/img && mkdir static/css

Sobald Sie die Verzeichnisse erstellt haben, laden wir eine Testdatei herunter, die wir schließlich zu unserem Objektspeicher hinzufügen. Wechseln Sie in das Verzeichnis "+ img +", da wir ein Bild herunterladen werden.

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

In diesem Verzeichnis laden wir das DigitalOcean-Logo mit dem Befehl "+ wget +" von Wget herunter. Dies ist ein häufig verwendetes GNU-Programm, das auf Ubuntu-Distributionen vorinstalliert ist, um Inhalte von Webservern abzurufen.

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

Sobald Sie "+ ENTER +" drücken, wird eine Ausgabe ähnlich der folgenden angezeigt:

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]

Wenn Sie an dieser Stelle den Befehl "+ ls " ausführen, werden Sie feststellen, dass ein Bild mit dem Namen " DO_Logo_icon_blue.png " jetzt im Verzeichnis " static / img / +" vorhanden ist.

Wenn diese Verzeichnisse eingerichtet und das Bild, das wir speichern, auf den Server heruntergeladen sind, können wir die mit unserer Django-App verknüpften Dateien bearbeiten.

Schritt 4 - Bearbeiten Sie CSS- und HTML-Dateien

Beginnen wir mit der Bearbeitung des Stylesheets. Sie sollten in das Verzeichnis "+ css +" wechseln, damit wir ein grundlegendes Stylesheet für unsere Web-App hinzufügen können.

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

Verwenden Sie nano oder einen anderen Texteditor Ihrer Wahl, um das Dokument zu bearbeiten.

nano app.css

Fügen Sie nach dem Öffnen der Datei das folgende CSS hinzu:

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;
}

Sobald Sie fertig sind, können Sie die Datei speichern und schließen.

Navigieren Sie von hier aus zum Verzeichnis "+ templates".

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

Wir müssen eine Datei mit dem Namen "+ home.html +" öffnen und HTML hinzufügen, damit unsere grundlegende Web-App angezeigt wird. Öffnen Sie die Datei mit nano, damit Sie sie bearbeiten können:

nano home.html

Fügen Sie im Dokument Folgendes hinzu:

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>

Speichern und schließen Sie die Datei. Die letzte Datei, die wir aktualisieren werden, ist die Datei "+ urls.py ", sodass sie auf Ihre neu erstellte " home.html +" - Datei verweist. Wir müssen in das folgende Verzeichnis wechseln:

cd ~/django-apps/mysite/mysite

Verwenden Sie nano, um die Datei urls.py zu bearbeiten.

nano urls.py

Sie können alles in der Datei löschen und dann Folgendes hinzufügen:

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'),
]

Wenn diese Dateien eingerichtet sind, können wir als Nächstes die Konfiguration unserer Einstellungen vornehmen, um sie in den Objektspeicher zu integrieren.

Schritt 5 - Verwenden Sie Python Decouple, um die Anmeldeinformationen für Leerzeichen zu extrahieren

Navigieren Sie in Ihrer virtuellen Umgebung zum Speicherort der Datei "+ settings.py ". Hier erstellen wir die Datei " settings.ini +", um Ihre Anmeldeinformationen separat zu speichern.

cd ~/django-apps/mysite/mysite

Erstellen Sie die Datei + settings.ini + mit + touch +, einem Linux-Befehl, der neue, leere Dateien in dem Verzeichnis erstellt, von dem aus er aufgerufen wird.

touch settings.ini

Die zu erstellende Einstellungsdatei hat eine Dateierweiterung. Diese Datei wird von Python Decouple nach Einstellungsdaten durchsucht, und in der Einstellungsdatei wird auch auf den API-Schlüssel verwiesen. Sie können auch als alternative Erweiterung zu verwenden.

Öffnen Sie nun die Datei mit Ihrem bevorzugten Texteditor, z. B. nano.

nano settings.ini

In diesem Dokument wird für Python Decouple eine Abschnittsüberschrift mit dem Namen "+ [settings] +" benötigt. Außerdem werden unsere Spaces-Anmeldeinformationen hinzugefügt, indem sie https://www.digitalocean.com/community/tutorials/how zugewiesen werden -zu-verwenden-Variablen-in-Python-3 [Variablen]. Ihre vollständige Datei sollte folgendermaßen aussehen:

settings.ini

[settings]
SPACES_ACCESS_KEY=
SPACES_SECRET_ACCESS_KEY=

Um auf diese Anmeldeinformationen zugreifen zu können, müssen Sie in der Datei "+ settings.ini " auf die Datei " settings.py +" verweisen.

Im nächsten Schritt konfigurieren wir die Datei "+ settings.py +" vollständig.

Schritt 6 - Einstellungen aktualisieren

Jetzt ist es an der Zeit, Ihre Einstellungsdatei mit Ihren Spaces-Anmeldeinformationen zu aktualisieren, damit wir die Seite, die wir eingerichtet haben, nutzen können, um das Bild anzuzeigen.

Stellen Sie sicher, dass Sie sich am richtigen Ort befinden, um auf Ihre Einstellungsdatei zuzugreifen.

cd ~/django-apps/mysite/mysite

Öffnen Sie die Datei zum Bearbeiten mit nano oder einem anderen Texteditor:

nano settings.py

Am Anfang der Datei muss eine https://www.digitalocean.com/community/tutorials/how-to-import-modules-in-python-3 [+ import + Anweisung] hinzugefügt werden um das Konfigurationsmodul von Decouple zu verwenden.

settings.py

...
import os

...

Gehen Sie in der Datei zu den zulässigen Hosts und fügen Sie Ihre Server-IP hinzu.

settings.py

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

Fügen Sie dann "+ storages " zum Abschnitt "Installierte Apps" der Einstellungsdatei hinzu und entfernen Sie " django.contrib.admin +", da wir dies in diesem Tutorial nicht verwenden werden. Es sollte wie folgt aussehen.

settings.py

...
# Application definition

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

]
...

Ersetzen Sie den markierten Text und fügen Sie ihn in den Abschnitt "+ TEMPLATES " der Einstellungsdatei ein, damit das Projekt weiß, wo sich Ihre " home.html +" - Datei befindet.

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',
           ],
       },
   },
]
...

Zuletzt aktualisieren wir Ihre Einstellungen am Ende der Datei. Wir werden das Folgende unterhalb des Abschnitts "+ # Static files +" hinzufügen. In den ersten beiden Zeilen wird der Verweis auf die Datei eingefügt, damit die Konfigurationsparameter abgerufen werden können.

Stellen Sie sicher, dass Sie darunter Ihren eigenen Bucket-Namen hinzufügen. Zum Zeitpunkt des Schreibens ist NYC3 die einzige Region, in der sich derzeit Spaces befinden, sodass dies als Endpunkt-URL übergeben wird.

Fügen Sie für einen Terminalspeicherort das Verzeichnis hinzu, in das Sie Ihre Dateien importieren möchten. Sie können ein Verzeichnis über die Spaces-Oberfläche im Browser hinzufügen.

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'

Jetzt haben wir unsere Spaces-Anmeldeinformationen vom Python-Code entfernt und unsere Einstellungsdatei ist bereit, unsere Django-App in den Objektspeicher zu integrieren.

Lassen Sie uns die Django-Webanwendung ausführen, um zu überprüfen, ob alles korrekt eingerichtet wurde.

Schritt 7 - Sammeln Sie statische Dateien

Jetzt führen wir "+ collectstatic +" aus und Sie werden feststellen, dass Dateien übertragen werden, einschließlich des Bildes, das wir in unserem statischen Verzeichnis gespeichert haben. Es wird an den Speicherort übertragen, den wir in der Einstellungsdatei angegeben haben.

Navigieren Sie dazu zu "+ ~ / django-apps / mysite / +":

cd ~/django-apps/mysite

Führen Sie im Verzeichnis den folgenden Befehl aus:

python manage.py collectstatic

Sie sehen die folgende Ausgabe und sollten auf Aufforderung mit "+ yes +" antworten.

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:

Anschließend wird eine Meldung angezeigt, dass die Datei in Spaces kopiert wurde.

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

1 static file copied, 1 unmodified.

Wenn Sie zu diesem Zeitpunkt von Ihrem DigitalOcean Cloud-Konto zu Ihrem Bucket zurückkehren, werden die Verzeichnisse "+ css " und " img " zu dem Ordner hinzugefügt, auf den Sie verwiesen haben, wobei " app.css +" im "" steht + css + Verzeichnis und das + DO-Logo_icon_blue-.png + Bild im + img + `Verzeichnis.

Schritt 8 - Führen Sie die Anwendung aus

Wenn Sie eine UFW-Firewall eingerichtet haben, lassen Sie zunächst eingehenden Datenverkehr über Port 8000 durch, indem Sie den folgenden Befehl ausführen:

sudo ufw allow 8000

Navigieren Sie bei aktivierter virtueller Umgebung zum Speicherort der Datei und führen Sie die Anwendung mit den folgenden Befehlen aus:

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

Navigieren Sie in einem Webbrowser zu http: //: 8000, um das Ergebnis der von Ihnen erstellten Django-Anwendung anzuzeigen. Sie werden die folgende Ausgabe in Ihrem Browser sehen:

image: https://assets.digitalocean.com/articles/eng_python/django/python-decouple-spaces.png [DigitalOcean Spaces Django und Python Decouple-Beispiel-App]

Wenn Sie mit dem Testen Ihrer App fertig sind, können Sie die Tastenkombination "+ STRG" + "+ C " drücken, um den Befehl " runserver" zu beenden. Dadurch kehren Sie zu Ihrer Programmierumgebung zurück.

Wenn Sie bereit sind, Ihre Python-Umgebung zu verlassen, können Sie den Befehl + disable + ausführen:

deactivate

Wenn Sie Ihre Programmierumgebung deaktivieren, kehren Sie zur Eingabeaufforderung des Terminals zurück.

Fazit

In diesem Tutorial haben Sie erfolgreich eine Django-Anwendung erstellt, die Dateien aus DigitalOcean Spaces bereitstellt und gleichzeitig die Spaces-Anmeldeinformationen aus dem Python-Code entfernt. Dabei haben Sie Informationen zu statischen Dateien, zum Verwalten statischer Dateien, zu deren Bereitstellung über einen Cloud-Dienst und zum Entkoppeln Ihrer Konfigurationsparameter von Ihrer Python-Einstellungsdatei erhalten.

Weitere Informationen zur Webentwicklung mit Python und Django finden Sie in unserer Tutorial-Reihe unter Django Development.

Related