Sie machen tatsächlich verschiedene Dinge.
get()
Dies ist ein Top-Level - Verfahren, und es gibt einen für jede HTTP - Verb - get(), post(), patch()etc. Sie würden es außer Kraft setzen , wenn Sie etwas tun wollen , bevor ein Antrag der Ansicht verarbeitet wird, oder danach. Dies wird jedoch nur aufgerufen, wenn eine Formularansicht zum ersten Mal geladen wird, nicht, wenn das Formular gesendet wird. Grundlegendes Beispiel in der Dokumentation . Standardmäßig wird nur die konfigurierte Vorlage gerendert und der HTML-Code zurückgegeben.
class MyView(TemplateView):
def get(self, *args, **kwargs):
print('Processing GET request')
resp = super().get(*args, **kwargs)
print('Finished processing GET request')
return resp
get_queryset()
Wird von ListViews verwendet - bestimmt die Liste der Objekte, die Sie anzeigen möchten. Standardmäßig erhalten Sie nur alles für das von Ihnen angegebene Modell. Durch Überschreiben dieser Methode können Sie diese Logik erweitern oder vollständig ersetzen. Django-Dokumentation zu diesem Thema .
class FilteredAuthorView(ListView):
template_name = 'authors.html'
model = Author
def get_queryset(self):
qs = super().get_queryset()
return qs.filter(name__startswith=self.kwargs['name'])
get_context_data()
Diese Methode wird verwendet, um ein Wörterbuch zu füllen, das als Vorlagenkontext verwendet werden soll. Zum Beispiel füllt ListViews das Ergebnis get_queryset()wie author_listim obigen Beispiel aus. Sie werden diese Methode wahrscheinlich am häufigsten überschreiben, um Dinge hinzuzufügen, die in Ihren Vorlagen angezeigt werden sollen.
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
data['page_title'] = 'Authors'
return data
Und dann können Sie in Ihrer Vorlage auf diese Variablen verweisen.
<h1>{{ page_title }}</h1>
<ul>
{% for author in author_list %}
<li>{{ author.name }}</li>
{% endfor %}
</ul>
Um Ihre Hauptfrage zu beantworten, haben Sie so viele Methoden, dass Sie Ihre benutzerdefinierte Logik auf einfache Weise punktgenau festhalten können. Dadurch kann Ihr Code nicht nur lesbarer und modularer, sondern auch besser getestet werden.
Die Dokumentation sollte alles erklären. Wenn immer noch nicht genug, finden Sie möglicherweise auch die Quellen hilfreich. Sie werden sehen, wie alles mit Mixins implementiert wird, die nur möglich sind, weil alles unterteilt ist.
get, und schon gar nicht in diesem Fall. Hier sollten Sie nur überschreibenget_context_data.