Python Django Tutorial (2)

Dies ist ein Material für Lernsitzungen. Ich werde es erklären, während ich dem Tutorial von django1.8 folge. https://docs.djangoproject.com/en/1.8/intro/tutorial02/

Da Version 1.4 die neueste Version des offiziellen japanischen Dokuments ist, gibt es einige Unterschiede, aber der allgemeine Ablauf ist der gleiche. Es ist daher eine gute Idee, ihn zu lesen. http://django-docs-ja.readthedocs.org/en/latest/intro/tutorial02.html

Tutorial 1Tutorial-Zusammenfassung

Überblick

Dieses Mal werde ich die Management-Site von Django erläutern. In Django wird standardmäßig eine Verwaltungssite erstellt, und Benutzer mit Personalautorität können das Modell von hier aus bedienen. Von mir hinzugefügte Modelle, einschließlich des Benutzermodells, das Django standardmäßig hat (Zum Beispiel die beiden im Lernprogramm erstellten Abstimmungsmodelle) Erstellen Sie eine solche Seite auch halbautomatisch.

Wenn es sich um eine Webanwendung handelt, die nur Daten wie das Registrieren von Daten, das Anzeigen einer Liste und das Suchen verarbeitet Sie können es einfach erstellen, indem Sie diese Seite anpassen.

Vorbereitung der Superuser

Dokument → https://docs.djangoproject.com/de/1.8/intro/tutorial02/#creating-an-admin-user Quelle → add_app_4_database_migration Tag (keine Änderung)

Ein Benutzer mit Personalberechtigung muss die Verwaltungssite berühren. Ein Superuser für Django wird mit dem Befehl createuperuser erstellt.

$ ./manage.py createsuperuser
Username (leave blank to use 'shimomura'): admin
Email address:
Password:
Password (again):
Superuser created successfully.

Wenn Sie den Befehl "createuperuser" ausführen, werden Sie aufgefordert, Ihren Benutzernamen, Ihre E-Mail-Adresse und Ihr Kennwort einzugeben. Wenn der Benutzername Standard ist, wird der PC-Benutzername unverändert eingegeben. Diesmal ist es "admin". E-Mail kann leer sein. Geben Sie als Passwort dieselbe Zeichenfolge zweimal ein.

Wenn schließlich "Superuser erfolgreich erstellt" angezeigt wird, ist der Vorgang abgeschlossen.

Greifen Sie auf die Verwaltungssite zu

Dokument → https://docs.djangoproject.com/de/1.8/intro/tutorial02/#start-the-development-server Quelle → add_app_4_database_migration Tag → 954ba86

Starten Sie nach dem Erstellen eines Superusers den Testserver und greifen Sie auf die Verwaltungssite zu. Verwenden Sie zum Starten des Servers den Befehl runserver.

$ ./manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
November 05, 2015 - 07:37:15
Django version 1.8.5, using settings 'tutorial.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

In diesem Zustand mit einem Browser http://localhost:8000/admin/ Wenn Sie darauf zugreifen, sollten Sie wie unten gezeigt zum Anmeldebildschirm weitergeleitet werden.

Kobito.b0bz7R.png

Wenn Sie sich erfolgreich anmelden können, wird der folgende Bildschirm angezeigt. Standardmäßig werden nur die Authentifizierungsmodelle (Gruppen und Benutzer) angezeigt.

Kobito.WQw8Oi.png

--

Lokalisierung ins Japanische

Ich glaube, ich konnte die Site sicher anzeigen, aber wie Sie sehen können, ist die Management-Site standardmäßig in Englisch. Ich mag kein Englisch, also lasst uns Japanisch verwenden.

Natürlich unterstützt Django mehrere Sprachen. Die anzuzeigende Sprache wird in der Nähe der Zeile 103 von settings.py definiert. Der Standardwert ist "en-us", also ändern wir dies in "ja".

settings.py_In der Nähe der Linie 103


# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ja'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Tokyo'

Versuchen Sie nach dem Beheben erneut, auf die Verwaltungssite zuzugreifen. http://localhost:8000/admin/

Kobito.dVaOZw.png

Es scheint, dass es erfolgreich ins Japanische übersetzt wurde.

Abstimmungsmodell hinzugefügt

Dokument → https://docs.djangoproject.com/de/1.8/intro/tutorial02/#make-the-poll-app-modizable-in-the-admin Quelle → 954ba86 35ec2c6

Nachdem Sie die Verwaltungssite jetzt sicher sehen können, zeigen wir auch Ihr eigenes Modell an. Die Einstellungen und Anpassungen des Modells, das auf der Verwaltungssite angezeigt werden soll, sind in app / admin.py beschrieben.

Dieses Mal werden wir das Fragenmodell der Umfrage-App nach dem Tutorial hinzufügen.

polls/admin.py


from django.contrib import admin

from .models import Question


admin.site.register(Question)

Es sollte jetzt auf der Admin-Site sichtbar sein.

Kobito.Q3fesY.png

Daten hinzufügen und anpassen

Daten hinzufügen

Versuchen wir auch, Daten hinzuzufügen. Wenn Sie auf den Link Hinzufügen klicken, wird das Formular zum Hinzufügen von Daten angezeigt. Da das Fragenmodell zwei Felder hatte, "question_text" und "pub_date", Zwei Elemente werden auch in der Formularanzeige angezeigt.

Kobito.24CSrL.png

Kobito.dMucDK.png

Wenn Sie sich registrieren, sollten Sie über Daten mit dem Namen "Frageobjekt" verfügen. Wenn Sie sich erneut registrieren, werden zwei "Frageobjekte" angezeigt.

Kobito.eBQJpR.png

Anpassung des Objektnamens

Da wir nicht wissen, um welche Art von Daten es sich handelt, ändern wir die Zeichenfolge, die das Objekt darstellt. Um dies zu ändern, überschreiben Sie einfach die Methode str (unicode im Fall der Python2-Serie) des Modells, das Sie ändern möchten. Dieses Mal werden wir es so ändern, dass der Inhalt der Frage angezeigt wird.

polls/models.py


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

Kobito.ilTlCf.png

Passen Sie den Modellnamen an

Wenn Sie die Zeichenfolge ändern möchten, die das Modell selbst darstellt (in diesem Fall Frage), legen Sie sie in der Klasse Meta </ b> fest. Der Name, der das Modell mit verbose_name darstellt, Sie können mit verbose_name_plural einen Namen festlegen, der die Pluralform des Modells darstellt.

polls/models.py


class Question(models.Model):
    class Meta:
        verbose_name = 'Frage'
        verbose_name_plural = 'Multiple Form der Frage'

    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

Kobito.r2Xvyz.png

Stellen Sie sicher, dass "Fragen", "Fragen" in "Fragen", "Fragenplural" geändert werden.

Passen Sie die Bestellung an

Standardmäßig ist die Reihenfolge der Registrierung absteigend (die neuesten werden angezeigt). Ändern Sie dies jedoch so, dass sie am Veröffentlichungsdatum (pub_date) von der neuesten Reihenfolge abweicht.

Änderungen werden in der Eigenschaft "ordering" der Meta-Klasse des Modells festgelegt. Der Einstellungswert ist der Feldname. Wenn Sie ihn in absteigender Reihenfolge wünschen, fügen Sie am Anfang - hinzu.

class Question(models.Model):
    class Meta:
        verbose_name = 'Frage'
        verbose_name_plural = 'Multiple Form der Frage'
        ordering = ['-pub_date']

    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

Ordnen Sie zunächst in der Reihenfolge des Frageninhalts an, und wenn diese identisch sind, wenn Sie in absteigender Reihenfolge des Veröffentlichungsdatums anordnen möchten ordering = ['question_text', '-pubdate'] Schreiben Sie wie folgt. Bitte überprüfen Sie, ob sie tatsächlich neu angeordnet wurden.

--

Es ist auch möglich, das Formular selbst beim Hinzufügen anzupassen. (Ich werde im nächsten Abschnitt unten erklären) Im ursprünglichen Tutorial, wenn Sie danach ein Frageobjekt hinzufügen Ich erkläre, wie das Design des Formulars geändert werden kann, aber diesmal werde ich die Erklärung weglassen. Wenn Sie interessiert sind, lesen Sie bitte das Tutorial der Hauptfamilie. https://docs.djangoproject.com/en/1.8/intro/tutorial02/#customize-the-admin-form

Objekte mit Beziehung

Dokumente → https://docs.djangoproject.com/de/1.8/intro/tutorial02/#adding-related-objects (Erklärt in "Hinzufügen eines Inline-Elements" von der Mitte aus) Quelle → 35ec2c6 84f1086

Wir werden ein weiteres Modell hinzufügen, "Choice", das die Umfrage-App hat. Dieses Modell hat einen Fremdschlüssel (Beziehung zum Fragenmodell). Wie sieht es aus?

Bearbeiten Sie zuerst polls / admin.py und fügen Sie Choice hinzu, um es in admin anzuzeigen.

polls/admin.py


from django.contrib import admin

from .models import Question
from .models import Choice  #Hier hinzufügen


admin.site.register(Question)
admin.site.register(Choice)  #Hier hinzufügen

Kobito.yD8Cfw.png

Es scheint, dass es sicher hinzugefügt wurde. Das Choice-Modell verfügt nicht über Meta-Einstellungen und wird daher unverändert angezeigt. Als nächstes schauen wir uns den zusätzlichen Bildschirm an.

Kobito.dfblb5.png

Im Falle eines ForeignKey-Felds wird es in diesem Formular als Auswahlliste angezeigt. Sie können auch ein neues Frageobjekt erstellen, indem Sie das grüne Pluszeichen auf der rechten Seite drücken.

Kobito.DcXGUI.png

Der Inhalt ist wie folgt und das Objekt des zuvor erstellten Fragenmodells ist enthalten. Wenn __str__ nicht gesetzt ist, werden alle drei als Frageobjekt angezeigt und es wird traurig. Natürlich können Sie diese Option frei anpassen, was Sie anbieten möchten. Die Reihenfolge wird nach der in der Meta-Klasse des Modells festgelegten Reihenfolge sortiert.

Modellanpassung für Admin-Site

Auf diese Weise führt das Registrieren des Modells mit der Funktion "admin.site.register" automatisch zu verschiedenen Aktionen Mit einer kleinen Änderung können Sie den Inhalt des Formulars anpassen, die Liste anzeigen, Suchelemente hinzufügen usw.

Übergeben Sie beim Anpassen die Klasse, die das Verhalten auf der Admin-Site beschreibt, an das zweite Argument der Funktion admin.site.reigster. Diese Klasse erbt die Klasse "admin.ModelAdmin" und überschreibt nur die erforderlichen Teile selbst. Da es schwer zu verstehen ist, wenn es sich nur um Sätze handelt, werden wir tatsächlich Beispiele für jede Anpassung zeigen.

Inline-Element hinzufügen

Dokumente → https://docs.djangoproject.com/de/1.8/intro/tutorial02/#adding-related-objects Quelle → 84f1086 e4bacf7

Wenn Sie in den bisherigen Beispielen Fragen und Auswahlmöglichkeiten hinzufügen möchten, erstellen Sie zuerst die ursprüngliche Frage und dann Ich musste es auf der zusätzlichen Seite der Wahl auswählen. Es ist schwierig, Frage einzeln in Auswahl auszuwählen, und es besteht die Möglichkeit, dass bei der Auswahl ein Fehler gemacht wird.

Inline-Formular ist dort bequem. Wenn Sie dies verwenden, ist es das Objekt der Beziehung (Frage in diesem Fall) Sie können das Zielobjekt (in diesem Fall Auswahl) gleichzeitig erstellen.

Im Fall der Admin-Site wird eine Klasse zum Anzeigen von Inline mit dem Namen InlineAdmin vorbereitet. Dieses Mal werden wir die StackedInline Klasse verwenden.

Der geänderte Quellcode lautet wie folgt.

polls/admin.py


from django.contrib import admin

from .models import Question
from .models import Choice


class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3


class QuestionAdmin(admin.ModelAdmin):
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)

Fügen Sie die Definitionen von "ChoiceInline" und "QuestionAdmin" zum zweiten Argument hinzu, wenn Sie eine Frage registrieren. Es wurde geändert, um "QuestionAdmin" zu bestehen.

admin.StackedInline ist eine Basisklasse zum Erstellen von Inlines im gestapelten Format. Stellen Sie das Zielmodell (in diesem Fall Auswahl) und die Anzahl der Anzeigen (extra = 3) ein. Sie können auch die maximale Anzahl festlegen und festlegen, ob diese gelöscht werden soll oder nicht.

admin.ModelAdmin ist eine Klasse zum Anpassen des Verhaltens des Modells auf der Verwaltungssite. Dieses Mal werden Inlines festgelegt und das Verhalten beim Hinzufügen und Bearbeiten von Objekten wird geändert.

Wenn Sie sich bisher geändert haben, wechseln Sie erneut zur Seite zum Hinzufügen von Fragen (oder zum Bearbeiten von Seiten) auf der Verwaltungssite Sie können sehen, dass Sie Auswahlmöglichkeiten gleichzeitig bearbeiten können.

Kobito.3GQrd4.png

Passen Sie die Objektanzeige an

Dokument → https://docs.djangoproject.com/de/1.8/intro/tutorial02/#customize-the-admin-change-list Quelle → e4bacf7 7f5128a

Jetzt, da Registrierung und Bearbeitung besser werden, passen wir die Listenanzeige an. Um die Anzeige zu ändern, setzen Sie list_display in der Klasse (QuestionAdmin), die durch das Erben von admin.ModelAdmin erstellt wurde.

polls/admin.py


...
class QuestionAdmin(admin.ModelAdmin):
    inlines = [ChoiceInline]
    list_display = ('question_text', 'pub_date')
...

Kobito.2sV4uA.png

Die Liste, die eine mörderische Landschaft war, ist etwas lebendiger geworden. Für alle Modelle fügt django automatisch einen Primärschlüssel hinzu. Als Randnotiz fügen wir das ebenfalls hinzu.

polls/admin.py


...
class QuestionAdmin(admin.ModelAdmin):
    inlines = [ChoiceInline]
    list_display = ('pk', 'question_text', 'pub_date')
...

Kobito.MR1ddC.png

Es ist ein gutes Gefühl.

Mehr Anpassung

Lassen Sie uns nach dem ursprünglichen Tutorial etwas Besonderes tun. Zusätzlich zu Feldern kann list_display auf eine Methode ohne Argumente gesetzt werden.

Fügen Sie dem Fragenmodell eine was_published_recently -Methode hinzu, um festzustellen, ob die Frage innerhalb eines Tages veröffentlicht wurde.

polls/models.py


import datetime

from django.db import models
from django.utils import timezone


class Question(models.Model):
...

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
...

Fügen Sie als Nächstes diese Methode zu list_display hinzu.

polls/admin.py


...
class QuestionAdmin(admin.ModelAdmin):
    inlines = [ChoiceInline]
    list_display = ('pk', 'question_text', 'pub_date', 'was_published_recently')
...

Kobito.gpHA62.png

Sie können es richtig sehen. Es kann interessant sein, eine Methode zu erstellen, die die Anzahl der mit der Frage verknüpften Auswahlmöglichkeiten zurückgibt.

Weitere Anpassung

Wenn das Ziel von list_display eine Methode ist, können Sie die Anzeige ändern und die Auftragsbedingungen festlegen, indem Sie der Methode Attribute hinzufügen. Setzen wir "admin_order_field", "boolean" und "short_description", indem wir dem ursprünglichen Tutorial folgen.

polls/models.py


...
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
    was_published_recently.admin_order_field = 'pub_date'
    was_published_recently.boolean = True
    was_published_recently.short_description = 'Published recently?'
...

Kobito.qOD9IC.png

Es fühlt sich sehr gut an. admin_order_field legt fest, welches Feld beim Sortieren betrachtet werden soll. In diesem Beispiel werden sie nach dem Feld "pub_date" sortiert. Durch Festlegen dieses Attributs können Sie auf die Kopfzeile der Tabelle klicken und diese sortieren.

Filtern, Suche hinzufügen

Zum Schluss fügen wir einen Filter und eine Suche hinzu. Legen Sie einfach die Eigenschaften in QuestionAdmin wie im Beispiel fest.

polls/admin.py


...
class QuestionAdmin(admin.ModelAdmin):
    inlines = [ChoiceInline]
    list_display = ('pk', 'question_text', 'pub_date', 'was_published_recently')
    list_filter = ['pub_date']
    search_fields = ['question_text']
...

Kobito.SrObQZ.png

Sie können einfach Filter und Suchvorgänge wie diesen hinzufügen.

-- Zum nächsten Tutorial

Tutorial-Zusammenfassung

Recommended Posts

Python Django Tutorial (5)
Python Django Tutorial (2)
Python Django Tutorial (8)
Python Django Tutorial (6)
Python Django Tutorial (7)
Python Django Tutorial (1)
Python Django Tutorial Tutorial
Python Django Tutorial (3)
Python Django Tutorial (4)
Zusammenfassung des Python Django-Tutorials
Python-Tutorial
Python Django Tutorial Cheet Sheet
Zusammenfassung des Python-Tutorials
Django Tutorial Memo
Starten Sie das Django Tutorial 1
Django 1.11 wurde mit Python3.6 gestartet
[Docker] Tutorial (Python + PHP)
Django Python Web Framework
Django Polymorphic Associations Tutorial
Django Oscar einfaches Tutorial
Django Python Verschiebungstabelle
Versuchen Sie Debian + Python 3.4 + django1.7 ……
Python OpenCV Tutorial Memo
[Python-Tutorial] Datenstruktur
Django Girls Tutorial Hinweis
Cloud Run Tutorial (Python)
Python Django CSS reflektiert
Mach Django mit CodeStar (Python3.6.8, Django2.2.9)
Fangen Sie mit Django an! ~ Tutorial ⑤ ~
Einführung in Python Django (2) Win
[Python-Tutorial] Kontrollstruktur-Tool
Python
Mach Django mit CodeStar (Python3.8, Django2.1.15)
Python3 + Django ~ Mac ~ mit Apache
ToDo-Listenerstellung [Python Django]
Erste Schritte mit Python Django (1)
Fangen Sie mit Django an! ~ Tutorial ④ ~
Django
Erste Schritte mit Python Django (4)
Erste Schritte mit Python Django (3)
Fangen Sie mit Django an! ~ Tutorial ⑥ ~
Installieren Sie Python 3.7 und Django 3.0 (CentOS)
[Python] Persönliches Tutorial zum Entscheidungsbaum
GAE + Python + Django süchtig machende Geschichte
Einführung in Python Django (6)
Erste Schritte mit Python Django (5)
Bis zur Veröffentlichung von Python [Django] de Web Service [Tutorial Teil 1]
Gehirnwellenanalyse mit Python: Python MNE-Tutorial
Python Practice_Virtual Environment Setup ~ Django-Installation
Erstellen Sie eine neue Anwendung mit Python, Django
Python + Django + Scikit-Learn + Mecab (1) mit Heroku
Python + Django + Scikit-Learn + Mecab (2) mit Heroku
Führen Sie python3 Django1.9 mit mod_wsgi aus (deploy)
Django Girls Tutorial Zusammenfassung Erste Hälfte
Stolpern Sie beim Django 1.7-Tutorial
Stellen Sie das Django-Lernprogramm für IIS bereit ①
Installieren Sie das Python Framework Django mit pip
Einführung in Python Django (2) Mac Edition
[Python Tutorial] Eine einfache Einführung in Python
Lernverlauf für die Teilnahme an der Team-App-Entwicklung mit Python ~ Django Tutorial 5 ~