[PYTHON] Serie, in der Amateur-Infrastrukturingenieure Django mit Docker berühren touch: Django admin

TL;DR Fortsetzung von Amateur-Infrastrukturingenieur, der Django mit Docker berührt (2): Erstellen eines Modells. Wenn Sie von 1 lesen möchten, ↓ hier. Amateur-Infrastrukturingenieur berührt Django mit Docker (1): Machen Sie Django mit Docker Auch dieses Mal werde ich mit Django spielen, während ich eine Probe von [Django Girls] mache (https://tutorial.djangogirls.org/ja/). Da ich das letzte Mal ein Modell erstellt habe, möchte ich dieses Mal zu Ansicht und Vorlage gehen, aber zuerst lerne ich die Administrationssite (admin) zum Verwalten von Django-Modellen. Um bis zur Benutzererstellung der Verwaltungssite mit Docker-Compose ausführen zu können, muss ein erweiterter Befehl erstellt werden, damit der Erstellungsbefehl createuperuser mit einem Liner ausgeführt werden kann, was ebenfalls beschrieben wird.

Django admin Django hat standardmäßig eine Seite namens admin, um das erstellte Modell mit der GUI zu verwalten. Dieses Mal werden wir uns die Aktivierung und Verwendung ansehen.

① Bearbeiten Sie admin.py

admin.py Bearbeiten Sie wie folgt.

blog/admin.py


from django.contrib import admin
from .models import Post

admin.site.register(Post)

Da die erste Zeile von Anfang an enthalten ist, werden die anderen Zeilen hinzugefügt.

Gut verständlicher Kommentar

from django.contrib import admin

Anwendungsmodul für Admin-Site. Obwohl ich es das letzte Mal nicht erwähnt habe, wird "django.contrib.admin" standardmäßig auch in "INSTALLED_APPS" in "settings.py" aufgeführt, wo ich die von mir erstellte Anwendung hinzugefügt habe, damit sie von Anfang an verwendet werden kann. Es ist geworden.

from .models import Post

Das Post-Modell wird aus models.py aufgerufen, das im selben Verzeichnis gespeichert ist.

admin.site.register(Post)

Sie können ein Modell unter der Kontrolle der Admin-Site mit "admin.site.register (Model)" hinzufügen.

Schauen wir uns nun die Admin-Site im laufenden Container an. (Docker-compose up braucht keine Leute, die seit dem letzten Mal gelaufen sind.)

docker-compose up

Das Folgende wird von einem anderen Terminal ausgeführt. Beim letzten Mal habe ich "python manage.py migrate blog" ausgeführt, um nur Migrationen unter dem Blog-Verzeichnis zu migrieren. Dieses Mal habe ich jedoch auch das Administratormodell migriert, indem ich es ohne Argument ausgeführt habe.

docker-compose exec web bash
python manage.py migrate
exit

Greifen Sie auf "http: // IPADDRESS: 8000 / admin" zu 001.png Der Anmeldebildschirm wird geöffnet. Der hier einzugebende Login-Benutzer muss erstellt werden, indem der Befehl mit migrate.py auf die gleiche Weise wie bei der DB-Migration ausgeführt wird.

② Erstellen Sie einen Superuser für die Admin-Site

docker-compose exec web bash
python manage.py createsuperuser
exit

Wenn ich "createuperuser" starte, erhalte ich eine Eingabeaufforderung. Wenn Sie den Benutzernamen, die E-Mail-Adresse und das Kennwort eingeben, wird die Ausgabe "Superuser erfolgreich erstellt" ausgegeben. Geben Sie die hier eingegebenen Informationen auf dem Anmeldebildschirm ein.

002.png Ich konnte mich einloggen.

③ Aufnahmevorgang

Klicken Sie auf Beiträge. 003.png Da das POST-Modell das letzte Mal definiert und die Tabelle erstellt wurde, wird es natürlich als 0 Beiträge angezeigt. Es scheint, dass Sie Daten mit der Schaltfläche POST HINZUFÜGEN einfügen können. Versuchen Sie also, sie zu drücken. 004.png Wie beim letzten Mal in models.py definiert, gibt es Textfelder und Pulldown-Listen zur Eingabe. Ich werde eine als Testversion veröffentlichen. 005.png Ich konnte die Daten sicher hinzufügen. Gehen Sie in den Datenbankcontainer und prüfen Sie, ob er den Datensatz tatsächlich enthält.

docker-compose exec db bash
psql -U postgres
SELECT * FROM blog_post;

SELECT Ausführungsergebnis


 id | title |        text        |      created_date      |     published_date     | author_id
----+-------+--------------------+------------------------+------------------------+-----------
  1 | TEST  | This is test post. | 2020-05-02 07:47:14+00 | 2020-05-02 07:47:26+00 |         2
(1 row)

Ich konnte bestätigen, dass die Aufzeichnungen ordnungsgemäß gespeichert wurden. Sie können Datensätze auf demselben Bildschirm erstellen, aktualisieren und löschen.

Erstellen Sie eine Docker-Komposition, die die DB-Migration enthält, und erstellen Sie eine Superuser-Verarbeitung

Bisher habe ich mich nur zu Überprüfungszwecken mit "docker-compose exec" in den Container eingeloggt. Wenn möglich, wäre es jedoch klüger, mit Docker-compose sofort auf diesen Punkt aufzubauen.

①DB migrate Für die Migration müssen Sie nur einen Befehl eingeben, damit Sie ihn verarbeiten können, indem Sie command: in docker-compose.yaml wie unten gezeigt umschreiben. (Bei der Migration wird nur eine Migrationsdatei erstellt, sodass Sie diese nicht benötigen, wenn Sie bereits eine haben.)

docker-compose.yaml


command: sh -c "sleep 5; python manage.py migrate; python manage.py runserver 0.0.0.0:8000"

Ich habe 5 Sekunden geschlafen, bevor ich die Migration ausgeführt habe, aber ich habe sie hinzugefügt, da manchmal ein Fehler aufgrund eines Problems mit dem Startzeitpunkt von Postgres auftritt.

②createsuperuser Da Superuser-Prozesse zur Laufzeit interaktiv erstellt werden, kann Docker-Compose dies nur verarbeiten, wenn es mit einem einzelnen Liner ausgeführt werden kann. Wenn ich gegoogelt habe, scheint manage.py in der Lage zu sein, die Befehle zu erweitern, indem ein Ordner namens "management / command" erstellt und eine Python-Datei hinzugefügt wird. https://stackoverflow.com/questions/6244382/how-to-automate-createsuperuser-on-django https://docs.djangoproject.com/en/1.8/howto/custom-management-commands/ Verwenden Sie diese Option, um optional einen Benutzernamen und ein Kennwort zu erhalten und einen benutzerdefinierten Einzeilerbefehl zu erstellen.

cd blog
mkdir -p management/commands
touch management/__init__.py
touch management/commands/__init__.py

createcustomsuperuser.py

management/commands/createcustomsuperuser.py


from django.contrib.auth.management.commands import createsuperuser
from django.core.management import CommandError


class Command(createsuperuser.Command):
    help = 'Crate a superuser, and allow password to be provided'

    def add_arguments(self, parser):
        super().add_arguments(parser)
        parser.add_argument(
            '--password', dest='password', default=None,
            help='Specifies the password for the superuser.',
        )

    def handle(self, *args, **options):
        password = options.get('password')
        username = options.get('username')
        database = options.get('database')

        if password and not username:
            raise CommandError("--username is required if specifying --password")

        super().handle(*args, **options)

        if password:
            user = self.UserModel._default_manager.db_manager(database).get(username=username)
            user.set_password(password)
            user.save()

Gut verständlicher Kommentar

from django.contrib.auth.management.commands import createsuperuser

Importieren Sie dieses Mal, um den Befehl von createsuperuser zu erweitern.

from django.core.management import CommandError

Befehlsfehler, den Django hat. Dieses Mal wird es verwendet, um einen Fehler zurückzugeben, wenn nicht genügend Argumente vorhanden sind.

class Command(createsuperuser.Command):
    help = 'Crate a superuser, and allow password to be provided'

Der Wortlaut, der beim Aufrufen der Hilfe mit "--help" oder "-h" angezeigt wird, wurde hinzugefügt.

    def add_arguments(self, parser):
        super().add_arguments(parser)
        parser.add_argument(
            '--password', dest='password', default=None,
            help='Specifies the password for the superuser.',
        )

Eine Funktion, die Befehlsargumente hinzufügt. super (). Add_arguments (Parser) wird ausgeführt, um auch das Argument des ursprünglichen createduperuser hinzuzufügen. Es wurde ein Argument namens Kennwort hinzugefügt, das vom ursprünglichen Erstellungssuperuser nicht akzeptiert wurde.

    def handle(self, *args, **options):
        password = options.get('password')
        username = options.get('username')
        database = options.get('database')

        if password and not username:
            raise CommandError("--username is required if specifying --password")

        super().handle(*args, **options)

        if password:
            user = self.UserModel._default_manager.db_manager(database).get(username=username)
            user.set_password(password)
            user.save()

Der eigentliche Verarbeitungsteil. Der Benutzer, der mit dem herkömmlichen Erstellungs-Superuser-Prozess erstellt wurde, wird von db aus durchsucht, und das Kennwort wird festgelegt und gespeichert.

Schreiben Sie nach dem Erstellen dieser Datei docker-compose.yaml wie folgt neu.

docker-compose.yaml


    command: sh -c "sleep 5; python manage.py migrate; python manage.py createcustomsuperuser --username root --password 123456 --noinput --email '[email protected]'; python manage.py runserver 0.0.0.0:8000"

(Passwort ist ein Beispiel) Auf diese Weise scheint es gut zu sein, in docker-compose.yaml schreiben zu können, wenn Sie es im Manifest in Secret angeben, auch wenn Sie zu Kubernetes migrieren.

Bitte stellen Sie sicher, dass der Vorgang bis zu diesem Punkt in einer Zeile "Docker-Compose Up" abgeschlossen ist.

docker-compose up

Nächstes Mal werde ich lernen, wie man urls.py schreibt. (Wann wirst du eine Ansicht schreiben?)

Fortsetzung

Recommended Posts

Serie, in der Amateur-Infrastrukturingenieure Django mit Docker berühren touch: Django admin
Eine Reihe von Amateur-Infrastrukturingenieuren, die Django mit Docker berühren (2): Erstellen eines Modells
Eine Reihe von Amateur-Infrastrukturingenieuren, die Django mit Docker touching berühren: Ansicht, Vorlage, CSS
Stellen Sie die Django-Anwendung mit Docker bereit
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Eindrücke, Django zu berühren
Ein Memo zum Erstellen einer Django (Python) -Anwendung mit Docker
Starten Sie Django auf einem Docker-Container mit Docker-Compose Up
Erstellen Sie eine Entwicklungsumgebung mit Poetry Django Docker Pycharm
[Memo] Erstellen Sie mit Docker eine Entwicklungsumgebung für Django + Nuxt.js
Ich möchte einen Blog-Editor mit dem Administrator von Django erstellen
[Django] Erstellen Sie mit PyCharm schnell eine Entwicklungsumgebung für Django-Container (Docker)
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
Erstellen Sie eine Homepage mit Django
Ich habe versucht, das Entwicklungsstartverfahren von Django kurz zusammenzufassen
Ich habe eine Entwicklungsumgebung für Django 3.0 mit Docker, Docker-Compose und Poetry erstellt
[DynamoDB] [Docker] Erstellen Sie mit Docker-Compose eine Entwicklungsumgebung für DynamoDB und Django
Erstellen eines Flask-Servers mit Docker
Erstellen Sie eine Deb-Datei mit Docker
Django-Tipps - Erstellen Sie eine Ranking-Site mit Django-
Erstellen Sie eine Webanwendung mit Django
Machen Sie einen Filter mit einer Django-Vorlage
Grundlagen zum Berühren von MongoDB mit MongoEngine
Erstellen Sie mit Django einen Datei-Uploader