So richten Sie den Objektspeicher mit Django ein

Einführung

DigitalOcean Spaces ist eine Objektspeicherlösung, die sich ideal für unstrukturierte Daten wie Audio, Video, Bilder oder große Textmengen eignet. Um mehr über Leerzeichen und Objektspeicher zu erfahren, können SieAn Introduction to DigitalOcean Spaces durchlesen.

In diesem Tutorial erfahren Sie, wie Sie Ihre Django-Anwendung für die Arbeit mit Spaces einrichten.

Voraussetzungen

Um dieses Tutorial zu beginnen, sollten Sie ein paar Dinge einrichten:

Mit der Einrichtung eines ersten Servers und einem DigitalOcean Space- und API-Schlüssel können Sie beginnen.

[[Schritt 1 - Einrichten einer virtuellen Umgebung]] == Schritt 1 - Einrichten einer virtuellen Umgebung

Falls noch nicht geschehen, aktualisieren Sie zuerst Ihren Server und führen Sie ein Upgrade durch.

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

Ihr Server sollte mit Python 3 ausgeliefert werden, aber Sie können den folgenden Befehl ausführen, um sicherzustellen, dass er installiert ist:

sudo apt-get install python3

Installieren Sie als Nächstes pip, um die Softwarepakete für Python zu verwalten:

sudo apt-get install -y python3-pip

Schließlich können wir das Modulvirtualenv installieren, um damit eine Programmierumgebung einzurichten:

sudo pip3 install virtualenv

Weitere Anleitungen und Informationen zu Programmierumgebungen finden Sie untersetting up a virtual environment.

[[Schritt-2 - Erstellen von Django-App- und Install-Abhängigkeiten]] == Schritt 2 - Erstellen von Django-App und Installieren von Abhängigkeiten

Wir werden jetzt die Django-App entwickeln, die unseren DigitalOcean Space nutzt.

Führen Sie im Ausgangsverzeichnis des Servers den folgenden Befehl aus, um ein Verzeichnis zu erstellen (in diesem Fall nennen wir esdjango-apps), in dem das Projekt gespeichert und zum Verzeichnis navigiert werden soll:

mkdir django-apps
cd django-apps

Erstellen Sie in diesem Verzeichnis eine virtuelle Umgebung mit dem folgenden Befehl. Wir nennen esenv, aber Sie können es so nennen, wie Sie möchten.

virtualenv env

Sie können jetzt die Umgebung aktivieren und erhalten eine Rückmeldung, dass Sie sich in der Umgebung befinden, indem Sie das Präfix Ihrer Befehlszeile ändern.

. env/bin/activate

Sie erhalten eine Rückmeldung, dass Sie sich in der Umgebung befinden, wenn Sie das Präfix Ihrer Befehlszeile ändern. Es sieht ungefähr so ​​aus, ändert sich jedoch je nachdem, in welchem ​​Verzeichnis Sie sich befinden:

Installieren Sie in der Umgebung das Django-Paket mit pip, damit wir eine Django-App erstellen und ausführen können. Um mehr über Django zu erfahren, lesen Sie unsere Tutorial-Reihe zuDjango Development.

pip install django

Erstellen Sie dann das Projekt mit dem folgenden Befehl. In diesem Fall nennen wir esmysite.

django-admin startproject mysite

Als Nächstes installieren wir Boto 3, einAWS SDK for Python, mit dem unsere Anwendung mit Dingen wie S3, EC2 und DigitalOcean Spaces interagieren kann. Da DigitalOcean Spaces mit Amazon S3 kompatibel ist, können Spaces problemlos mit Tools wie Boto 3 interagieren. Weitere Informationen zum Vergleich zwischen S3 und Spaces finden Sie inSpaces docs.

sudo pip install boto3

Eine weitere Bibliothek, die für unser Projekt von entscheidender Bedeutung ist, sind Django-Speicher, nämlicha collection of custom storage backends for Django. Wir werden dies auch mit pip installieren.

sudo pip install django-storages

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

[[Schritt-3 - Hinzufügen von Verzeichnissen und Assets]] == Schritt 3 - Verzeichnisse und Assets hinzufügen

Wenn unsere Umgebung mit allen Abhängigkeiten eingerichtet ist, können Sie jetzt in das Verzeichnismysite/mysitewechseln.

cd ~/django-apps/mysite/mysite

Führen Sie im Verzeichnismysite/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 Verzeichnisstaticgespeichert 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 Verzeichnisimg, da wir ein Bild herunterladen.

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

In diesem Verzeichnis laden wir das DigitalOcean-Logo mit dem Befehlwgetvon 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

Sie sehen die Ausgabe ähnlich der folgenden:

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 zu diesem Zeitpunkt den Befehlls ausführen, werden Sie feststellen, dass jetzt ein Bild mit dem NamenDO_Logo_icon_blue.png im Verzeichnisstatic/img/ vorhanden ist.

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

[[Schritt 4 - Bearbeiten von CSS- und HTML-Dateien]] == Schritt 4 - Bearbeiten von CSS- und HTML-Dateien

Beginnen wir mit der Bearbeitung des Stylesheets. Sie sollten in das Verzeichniscsswechseln, 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 Verzeichnistemplates.

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

Wir müssen eine Datei mit dem Namenhome.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 %}



  
  Spaces + Django Tutorial
  


  

Spaces + Django Tutorial

Congratulations, you’re using Spaces!

Speichern und schließen Sie die Datei. Die letzte Datei, die wir aktualisieren, ist die Dateiurls.py, sodass sie auf die neu erstellte Dateihome.htmlverweist. 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 mit der Bearbeitung unserersettings.py-Datei fortfahren, um sie in den Objektspeicher zu integrieren.

[[Schritt-5 -—- Update-Einstellungen]] == Schritt 5 - Update-Einstellungen

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.

Beachten Sie, dass wir in diesem Beispiel unsere Anmeldeinformationen der Kürze halber fest codieren, dies ist jedoch für eine Produktionskonfiguration nicht sicher genug. Es wird empfohlen, ein Paket wiePython Decouple zu verwenden, um Ihre Spaces-Anmeldeinformationen zu maskieren. Dieses Paket trennt die Einstellungsparameter von Ihrem Quellcode, der für eine produktionsfähige Django-Anwendung erforderlich ist.

Zunächst navigieren wir zum Speicherort Ihrer Einstellungsdatei.

cd ~/django-apps/mysite/mysite

Öffnen Sie die Datei zum Bearbeiten mit nano:

nano settings.py

Fügen Sie Ihre Server-IP als zulässigen Host hinzu.

settings.py

...
ALLOWED_HOSTS = ['your-server-ip']
...

Fügen Sie dannstorages zum Abschnitt "Installierte Apps" der Einstellungsdatei hinzu und entfernen Siedjango.contrib.admin, da dies in diesem Lernprogramm nicht verwendet wird. 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',
    'storages'
]
...

Ersetzen Sie den markierten Text und fügen Sie ihn dem AbschnittTEMPLATESder Einstellungsdatei hinzu, damit das Projekt weiß, wo sich Ihre home.html-Datei befindet.

settings.py

...
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'mysite/templates')],
        '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 Folgendes unter dem Abschnitt# Static fileshinzufügen. Stellen Sie sicher, dass Sie Ihre eigenen Zugriffsschlüssel, den Bucket-Namen und das Verzeichnis hinzufügen, in dem Ihre Dateien gespeichert werden sollen. Sie können ein Verzeichnis über die Spaces-Oberfläche im Browser hinzufügen. Zum Zeitpunkt des Schreibens ist NYC3 die einzige Region, in der sich derzeit Spaces befinden, sodass dies als Endpunkt-URL übergeben wird.

settings.py

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

AWS_ACCESS_KEY_ID = 'your-spaces-access-key'
AWS_SECRET_ACCESS_KEY = 'your-spaces-secret-access-key'
AWS_STORAGE_BUCKET_NAME = 'your-storage-bucket-name'
AWS_S3_ENDPOINT_URL = 'https://nyc3.digitaloceanspaces.com'
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'your-spaces-files-folder'

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 ist unsere Einstellungsdatei bereit, um unsere Django-App in den Objektspeicher zu integrieren.

[[Schritt-6 - Sammeln statischer Dateien]] == Schritt 6 - Statische Dateien sammeln

Jetzt führen wircollectstatic 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 "Ja" 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 Verzeichnissecss undimg zu dem Ordner hinzugefügt, auf den Sie sie verwiesen haben, mitapp.css im css Verzeichnis und dasDO-Logo_icon_blue-.png Bild imimg Verzeichnis.

[[Schritt 7 - Testen der Anwendung]] == Schritt 7 - Testen der Anwendung

Nachdem alles eingerichtet und unsere Dateien in unserem Objektspeicher abgelegt sind, können wir unsere Anwendung testen, indem wir zu der Seite navigieren, auf der unsere statische Datei bereitgestellt wird.

Stellen Sie zunächst sicher, dass unsere Firewall den Datenverkehr über Port 8000 zulässt, indem Sie den folgenden Befehl eingeben:

sudo ufw allow 8000

Jetzt können wir unseren Server ausführen, indem wir auf die IP-Adresse unseres Servers verweisen und Port 8000 verwenden.

python manage.py runserver your-server-ip:8000

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

DigitalOcean Spaces Django Example App

Wenn Sie mit dem Testen Ihrer App fertig sind, können SieCTRL +C drücken, um den Befehlrunserver zu stoppen. Dadurch kehren Sie zu Ihrer Programmierumgebung zurück.

Wenn Sie bereit sind, Ihre Python-Umgebung zu verlassen, können Sie den Befehldeactivateausfü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 von DigitalOcean Spaces bereitstellt. Dabei haben Sie Informationen zu statischen Dateien, zum Verwalten statischer Dateien und zum Bereitstellen dieser Dateien über einen Cloud-Dienst erhalten.

Sie können mit Python und Django weiter über die Webentwicklung lernen, indem Sie unsere Tutorial-Reihe zuDjango Development lesen.