En effet, ils font des choses différentes.
get()
C'est une méthode de niveau supérieur, et il y en a une pour chaque verbe HTTP - get()
, post()
, patch()
, etc. Vous serait de la remplacer quand vous voulez faire quelque chose avant qu'une demande est traitée par la vue, ou après. Mais ce n'est appelée que lorsque une vue de formulaire est chargé pour la première fois, non pas lorsque le formulaire est soumis. Exemple de base de la documentation. Par défaut, il va juste rendre la configuration du modèle et de retourner le code HTML.
class MyView(TemplateView):
# ... other methods
def get(self, *args, **kwargs):
print('Processing GET request')
resp = super().get(*args, **kwargs)
print('Finished processing GET request')
return resp
get_query_set()
Utilisée par ListView
s - il détermine la liste des objets que vous souhaitez afficher. Par défaut, il va juste vous donner à tous pour le modèle que vous spécifiez. En substituant cette méthode, vous pouvez étendre ou de remplacer complètement cette logique. Documentation de Django sur le sujet.
class FilteredAuthorView(ListView):
template_name = 'authors.html'
model = Author
def get_queryset(self):
# original qs
qs = super().get_queryset()
# filter by a variable captured from url, for example
return qs.filter(name__startswith=self.kwargs.name)
get_context_data()
Cette méthode est utilisée pour remplir un dictionnaire à utiliser que le modèle de contexte. Par exemple, ListView
s va peupler le résultat de l' get_queryset()
comme author_list
dans l'exemple ci-dessus. Vous serez probablement en substitution de cette méthode le plus souvent d'ajouter des éléments à afficher dans vos modèles.
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
data['page_title'] = 'Authors'
return data
Et puis dans votre modèle, vous pouvez faire référence à ces variables.
<h1>{{ page_title }}</h1>
<ul>
{% for author in author_list %}
<li>{{ author.name }}</li>
{% endfor %}
</ul>
Maintenant pour répondre à votre question principale, la raison pour laquelle vous avez tant de nombreuses méthodes pour vous permettre de coller votre logique personnalisée avec précision de pin-point. Il permet, non seulement, votre code sera plus lisible et modulaire, mais aussi plus testable.
La documentation doit tout expliquer. Si pas encore assez, vous pouvez trouver les sources utiles. Vous verrez comment tout est mis en œuvre avec mixin qui ne sont possibles que parce que tout est compartimenté.