Dieser Artikel bietet Ihnen eine detaillierte Erklärung der Django-Ansichten in Python (mit Beispielen). Ich hoffe, dass er Ihnen als Referenz dienen wird.
Eine Ansichtsfunktion (Klasse), die als Ansicht bezeichnet wird, ist eine einfache Python-Funktion (Klasse), die Geschäftslogik enthält. Sie akzeptiert Webanforderungen und gibt Webantworten zurück.
Die Antwort kann der HTML-Inhalt einer Webseite, eine Weiterleitung, ein 404-Fehler, ein XML-Dokument oder ein Bild sein.
Eine Antwort zurückgeben, unabhängig davon, welche Logik die Ansicht selbst enthält. Es spielt keine Rolle, wo der Code geschrieben wird, solange er sich in Ihrem aktuellen Projektverzeichnis befindet. Mehr ist nicht erforderlich – „nichts Magisches“ sozusagen.
Um den Code irgendwo abzulegen, ist es üblich, Ansichten in einer Datei namens „views.py“ im Projekt- oder App-Verzeichnis zu platzieren.
Beispiel: Eine Ansicht, die das aktuelle Datum und die aktuelle Uhrzeit in Form eines HTML-Dokuments zurückgibt:
from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)
Lassen Sie uns den obigen Code Zeile für Zeile erklären:
Zuerst: Wir beginnen mit dem Modul django.http, das die Klasse HttpResponse und die Datetime-Bibliothek von Python importiert.
Als nächstes definieren wir die Funktion current_datetime. Es ist die Ansichtsfunktion. Jede Ansichtsfunktion verwendet ein HttpRequest-Objekt als ersten Parameter und wird normalerweise als Anforderung bezeichnet.
Beachten Sie, dass der Name der Ansichtsfunktion nicht wichtig ist; er muss nicht einheitlich benannt werden, damit Django ihn erkennt. Wir haben es „current_datetime“ genannt, da dieser Name die von ihm implementierten Funktionen genauer widerspiegeln kann.
Diese Ansicht gibt ein HttpResponse-Objekt zurück, das die generierte Antwort enthält. Jede Ansichtsfunktion ist für die Rückgabe eines HttpResponse-Objekts verantwortlich.
Django verwendet Anforderungs- und Antwortobjekte, um den Status durch das System zu leiten.
Wenn der Browser eine Seite vom Server anfordert, erstellt Django ein HttpRequest-Objekt, das Metadaten über die Anfrage enthält. Django lädt dann die entsprechende Ansicht und übergibt dieses HttpRequest-Objekt als ersten Parameter an die Ansichtsfunktion.
Jede Ansicht ist für die Rückgabe eines HttpResponse-Objekts verantwortlich.
CBV (klassenbasierte Ansicht) und FBV (funktionsbasierte Ansicht)
Die funktionsbasierte Ansicht wird FBV genannt und die Ansicht kann auch als klassenbasierte Ansicht geschrieben werden.
FBV-Version
# FBV版添加班级 以函数的方式实现 def add_class(request): if request.method == "POST": class_name = request.POST.get("class_name") models.Classes.objects.create(name=class_name) return redirect("/class_list/") return render(request, "add_class.html")
CBV-Version
# CBV版添加班级 以类的方式实现 from django.views import View class AddClass(View): # 继承View中的所有属性 def get(self, request): # 如果是get请求,就执行此段函数 return render(request, "add_class.html") def post(self, request): # 如果是post,请求就执行此段函数 class_name = request.POST.get("class_name") models.Classes.objects.create(name=class_name) return redirect("/class_list/")
Hinweis: Für CBV müssen entsprechende Änderungen in urls.py vorgenommen werden:
# urls.py中,要加括号 url(r'^add_class/$', views.AddClass.as_view()), # 注意: Addclass中并没有定义as_view方法,而是继承view中的方法,从而使其按照 #相应条件执行相应程序. 流程 1. AddPress.as_view() —— 》 view函数 2. 当请求到来的时候执行view函数: 1. 实例化自己写的类 —— 》self self = cls(**initkwargs) 2. self.request = request 3. 执行 self.dispatch(request, *args, **kwargs) 1. 执行父类中的dispatch方法 1. 判断请求方式是否被允许 1. 允许的情况 handler = 通过反射获取 get post 方法(指的是自己定义的类中的方法) 2. 不允许的情况 handler = 不允许的方法 3. handler(request, *args, **kwargs) 2. 返回HttpResponse对象 4. 返回HttpResponse对象 给django
Durch die Vererbung der View-Methode hilft es Vervollständigen Sie das logische Geschäft. Die Funktionen (acht Empfangsmethoden wie Post, Get, Filter usw.) sind prägnanter als die FBV-Version
CBV-Version, ohne Beurteilung und modularer.
CBV Version fügt Dekorator hinzu
Methoden in einer Klasse sind nicht genau die gleichen wie eigenständige Funktionen, daher können Funktionsdekoratoren nicht direkt auf Methoden in einer Klasse angewendet werden, wir müssen sie zuerst in Methodendekoratoren konvertieren.
Django stellt den Method_decorator-Dekorator zur Verfügung, um Funktionsdekoratoren in Methodendekoratoren umzuwandeln.
Methode 1:
# Achten Sie bei der Verwendung von CBV auf eine Anfrage Nach der Übergabe wird zuerst die Methode „dispatch()“ ausgeführt. Wenn wir einige Vorgänge für bestimmte Anforderungsverarbeitungsmethoden wie „get“, „post“ usw. ausführen müssen, können wir die Methode „dispatch“ hier manuell umschreiben ist das Gleiche wie das Hinzufügen von Dekoration auf FBV. Die Wirkung des Geräts ist die gleiche.
Methode 2 :
Dekorateur zu FBV hinzufügen
Request-Objekt
Wenn eine Seite angefordert wird, erstellt Django ein HttpRequest-Objekt, das die Originalinformationen der Anfrage enthält.
Django übergibt dieses Objekt automatisch an die entsprechende Ansichtsfunktion. Im Allgemeinen verwendet die Ansichtsfunktion herkömmlicherweise den Anforderungsparameter, um dieses Objekt zu akzeptieren.
Anforderungsbezogene allgemeine Werte
path_info Gibt die Benutzerzugriffs-URL ohne den Domänennamen zurück
Methode Die Zeichenfolgendarstellung der in der Anforderung verwendeten HTTP-Methode, ausgedrückt in allem Großbuchstaben.
GET Wörterbuchähnliches Objekt, das alle HTTP-GET-Parameter enthält
POST Wörterbuchähnliches Objekt, das alle HTTP-POST-Parameter enthält
body Anforderungstext, Bytetyp request.POST-Daten sind
Attribute
Aus dem Körper extrahierte Attribute sollten als schreibgeschützt betrachtet werden, sofern nicht anders angegeben.
Attribute:
Django kapselt die Anforderungszeile, die Header-Informationen und den Inhaltstext der Anforderungsnachricht in Attribute in der HttpRequest-Klasse.
Sofern nicht anders angegeben, ist alles andere schreibgeschützt.
0.HttpRequest.scheme
Eine Zeichenfolge, die das Anforderungsschema darstellt (normalerweise http oder https)
1. HttpRequest.body
Eine Zeichenfolge, die darstellt der Text der Anforderungsnachricht. Dies ist sehr nützlich bei der Verarbeitung von Nicht-HTTP-Nachrichten wie Binärbildern, XML, Json usw.
Wenn Sie jedoch Formulardaten verarbeiten möchten, empfiehlt sich die Verwendung von HttpRequest.POST.
Darüber hinaus können wir auch die Klassendateimethode von Python verwenden, um es zu bedienen. Weitere Informationen finden Sie unter HttpRequest.read().
2. HttpRequest.path
Eine Zeichenfolge, die die Pfadkomponente der Anfrage darstellt (ohne Domänennamen).
Zum Beispiel: „/music/bands/the_beatles/“
3. HttpRequest.method
Eine Zeichenfolge, die die in der Anfrage verwendete HTTP-Methode angibt. Es müssen Großbuchstaben verwendet werden.
Zum Beispiel: „GET“, „POST“
4, HttpRequest.encoding
Eine Zeichenfolge, die die Kodierungsmethode der übermittelten Daten angibt (wenn „Keine“ ist, wird sie angezeigt bedeutet die Verwendung der Einstellung DEFAULT_CHARSET, Standard ist „utf-8“).
Dieses Attribut ist beschreibbar und Sie können es ändern, um die Kodierung zu ändern, die für den Zugriff auf die Formulardaten verwendet wird.
Jeder nachfolgende Zugriff auf die Eigenschaft (z. B. das Lesen von Daten aus GET oder POST) verwendet den neuen Codierungswert.
Wenn Sie wissen, dass die Codierung der Formulardaten nicht DEFAULT_CHARSET ist, verwenden Sie sie.
5. HttpRequest.GET
Ein wörterbuchähnliches Objekt, das alle Parameter von HTTP GET enthält. Weitere Informationen finden Sie im QueryDict-Objekt.
6. HttpRequest.POST
Ein wörterbuchähnliches Objekt. Wenn die Anfrage Formulardaten enthält, werden die Daten in ein QueryDict-Objekt gekapselt.
POST-Anfragen können ein leeres POST-Wörterbuch haben – wenn ein Formular über die HTTP-POST-Methode gesendet wird, aber keine Daten im Formular vorhanden sind, wird das QueryDict-Objekt trotzdem erstellt.
Daher sollten Sie if request.POST nicht verwenden, um zu überprüfen, ob die POST-Methode verwendet wird. Sie sollten if request.method == "POST" verwenden.
Außerdem: if you Verwenden Sie POST zum Hochladen. Wenn es sich um eine Datei handelt, werden die Dateiinformationen in das FILES-Attribut aufgenommen.
7. HttpRequest.COOKIES
Ein Standard-Python-Wörterbuch, das alle Cookies enthält. Sowohl Schlüssel als auch Werte sind Zeichenfolgen.
8. HttpRequest.FILES
Ein wörterbuchähnliches Objekt, das alle hochgeladenen Dateiinformationen enthält.
Jeder Schlüssel in FILES ist der Name in und der Wert sind die entsprechenden Daten.
Beachten Sie, dass FILES nur dann Daten enthält, wenn die Anforderungsmethode POST ist und das übermittelte