Django-Admin-Verwaltungstool

Django bietet ein webbasiertes Admin-Tool.

Djangos automatisches Admin-Tool ist Teil von django.contrib. Sie können es in INSTALLED_APPS in der settings.py Ihres Projekts sehen:

/HelloWorld/HelloWorld/settings.py Datei-Code:

INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', )

django.contrib ist eine umfangreiche Sammlung von Funktionssets und ein integraler Bestandteil von Djangos Basiscode.


Verwaltungswerkzeuge aktivieren

Normalerweise wird dies in urls.py automatisch konfiguriert, wenn wir ein Projekt generieren; wir müssen nur die Kommentare entfernen.

Die Konfigurationselemente sind wie folgt:

/HelloWorld/HelloWorld/urls.py Datei-Code:

# urls.py from django.conf.urls import url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), ]

Sobald all dies konfiguriert ist, ist das Django-Admin-Verwaltungstool bereit zur Ausführung.


Verwaltungstools verwenden

Starten Sie den Entwicklungsserver, besuchen Sie dann http://127.0.0.1:8000/admin/ im Browser, und Sie sehen die folgende Oberfläche:

Sie können den Befehlpython manage.py createsuperuserverwenden, um einen Superuser zu erstellen, wie unten gezeigt:

# python manage.py createsuperuser
Username (leave blank to use 'root'): admin
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.
[root@solar HelloWorld]#

Geben Sie dann den Benutzernamen und das Passwort ein, um sich anzumelden. Die Oberfläche ist wie unten gezeigt:

Damit die Admin-Oberfläche ein Datenmodell verwalten kann, müssen wir zuerst das Datenmodell bei Admin registrieren. Zum Beispiel haben wir zuvor das Modell Test in TestModel erstellt. Ändern Sie TestModel/admin.py:

HelloWorld/TestModel/admin.py: Dateicode:

from django.contrib import admin from TestModel.models import Test # Registrieren Sie hier Ihre Modelle. admin.site.register(Test)

Nach dem Aktualisieren können Sie die Testmodel-Datentabelle sehen:


Komplexes Modell

Die Admin-Seite ist leistungsstark und voll und ganz in der Lage, mit komplexeren Datenmodellen umzugehen.

Fügen Sie zuerst ein komplexeres Datenmodell in TestModel/models.py hinzu:

HelloWorld/TestModel/models.py: Datei-Code:

from django.db import models # Erstellen Sie hier Ihre Modelle. class Test(models.Model): name = models.CharField(max_length=20) class Contact(models.Model): name = models.CharField(max_length=200) age = models.IntegerField(default=0) email = models.EmailField() def __unicode__(self): return self.name class Tag(models.Model): contact = models.ForeignKey(Contact, on_delete=models.CASCADE,) name = models.CharField(max_length=50) def __unicode__(self): return self.name

Hier gibt es zwei Tabellen. Tag verwendet Contact als Fremdschlüssel. Ein Contact kann mehreren Tags entsprechen.

Wir können auch viele Attributtypen sehen, die wir noch nicht gesehen haben, wie IntegerField zum Speichern von Ganzzahlen.

Registrieren Sie mehrere Modelle in TestModel/admin.py und zeigen Sie sie an:

HelloWorld/TestModel/admin.py: Dateicode:

from django.contrib import admin from TestModel.models import Test,Contact,Tag # Registrieren Sie Ihre Modelle hier. admin.site.register([Test, Contact, Tag])

Aktualisieren Sie die Verwaltungsseite, und die Ergebnisse werden wie folgt angezeigt:

Mit dem obigen Admin-Tool können wir komplexe Modelloperationen durchführen.

Wenn Sie die Tabellenstruktur noch nicht erstellt haben, können Sie den folgenden Befehl verwenden, um sie zu erstellen:

$ python manage.py makemigrations TestModel  # 让 Django 知道我们在我们的模型有一些变更
$ python manage.py migrate TestModel   # 创建表结构

Benutzerdefiniertes Formular

Wir können die Admin-Seite anpassen, um die Standardseite zu ersetzen. Zum Beispiel möchten wir auf der obigen "add"-Seite nur die Abschnitte Name und E-Mail anzeigen. Ändern Sie TestModel/admin.py:

HelloWorld/TestModel/admin.py: Dateicode:

from django.contrib import admin from TestModel.models import Test,Contact,Tag # Registrieren Sie hier Ihre Modelle. class ContactAdmin(admin.ModelAdmin): fields = ('name', 'email') admin.site.register(Contact, ContactAdmin) admin.site.register([Test, Tag])

Der obige Code definiert eine ContactAdmin-Klasse, um das Anzeigeformat der Admin-Seite festzulegen.

Das Attribut fields darin definiert die anzuzeigenden Felder.

Da diese Klasse dem Contact-Datenmodell entspricht, müssen wir sie zusammen registrieren. Die Anzeige sieht wie folgt aus:

Wir können die Eingabefelder auch in Abschnitte unterteilen, und jeder Abschnitt kann sein eigenes Format definieren. Ändern Sie TestModel/admin.py wie folgt:

HelloWorld/TestModel/admin.py: Dateicode:

from django.contrib import admin from TestModel.models import Test,Contact,Tag # Registrieren Sie hier Ihre Modelle. class ContactAdmin(admin.ModelAdmin): fieldsets = ( ['Main',{ 'fields':('name','email'), }], ['Advance',{ 'classes': ('collapse',), # CSS 'fields': ('age',), }] ) admin.site.register(Contact, ContactAdmin) admin.site.register([Test, Tag])

Die obigen Felder sind in zwei Abschnitte unterteilt: Main und Advance. Das classes-Attribut gibt das CSS-Format des Abschnitts an, zu dem es gehört. Hier ist der Abschnitt Advance ausgeblendet:

Neben dem Abschnitt Advance befindet sich eine Schaltfläche Anzeigen, um ihn zu erweitern. Nach dem Erweitern können Sie auf Ausblenden klicken, um ihn auszublenden, wie in der folgenden Abbildung gezeigt:


Inline-Anzeige

Oben ist Contact der Fremdschlüssel von Tag, es besteht also eine Fremdschlüsselbeziehung.

Bei der standardmäßigen Seitenanzeige sind die beiden jedoch getrennt, wodurch ihre Unterordnung nicht widergespiegelt wird. Wir können die Inline-Anzeige verwenden, damit Tag an die Contact-Bearbeitungsseite angehängt angezeigt wird.

TestModel/admin.py bearbeiten:

HelloWorld/TestModel/admin.py: Dateicode:

from django.contrib import admin from TestModel.models import Test,Contact,Tag # Register your models here. class TagInline(admin.TabularInline): model = Tag class ContactAdmin(admin.ModelAdmin): inlines = [TagInline] # Inline fieldsets = ( ['Main',{ 'fields':('name','email'), }], ['Advance',{ 'classes': ('collapse',), 'fields': ('age',), }] ) admin.site.register(Contact, ContactAdmin) admin.site.register([Test])

Die Anzeige sieht wie folgt aus:


Anzeige der Listenseite

Nachdem mehrere Datensätze in Contact eingegeben wurden, sieht die Listenseite von Contact wie folgt aus:

Wir können auch die Anzeige dieser Seite anpassen. Um beispielsweise mehr Spalten in der Liste anzuzeigen, fügen Sie einfach das Attribut list_display in ContactAdmin hinzu:

HelloWorld/TestModel/admin.py: Dateicode:

from django.contrib import admin from TestModel.models import Test,Contact,Tag # Register your models here. class TagInline(admin.TabularInline): model = Tag class ContactAdmin(admin.ModelAdmin): list_display = ('name','age', 'email') # list inlines = [TagInline] # Inline fieldsets = ( ['Main',{ 'fields':('name','email'), }], ['Advance',{ 'classes': ('collapse',), 'fields': ('age',), }] ) admin.site.register(Contact, ContactAdmin) admin.site.register([Test])

Aktualisieren Sie die Seite, die Anzeige sieht wie folgt aus:

Die Suchfunktion ist sehr nützlich, wenn man eine große Anzahl von Datensätzen verwaltet. Wir können search_fields verwenden, um eine Suchleiste zu dieser Listenansicht hinzuzufügen:

HelloWorld/TestModel/admin.py: Dateicode:

from django.contrib import admin from TestModel.models import Test,Contact,Tag # Register your models here. class TagInline(admin.TabularInline): model = Tag class ContactAdmin(admin.ModelAdmin): list_display = ('name','age', 'email') # list search_fields = ('name',) inlines = [TagInline] # Inline fieldsets = ( ['Main',{ 'fields':('name','email'), }], ['Advance',{ 'classes': ('collapse',), 'fields': ('age',), }] ) admin.site.register(Contact, ContactAdmin) admin.site.register([Test])

In diesem Beispiel haben wir nach Datensätzen mit wechat gesucht, und die Ergebnisse sind wie unten dargestellt:

Das Django Admin bietet viele Funktionen. Interessierte Studenten können es eingehend studieren.

Weitere Erweiterungen