Ответ 1
Они действительно делают разные вещи.
get()
Это метод верхнего уровня, и один для каждого глагола HTTP - get()
, post()
, patch()
, и т.д. Вы бы переопределить его, когда вы хотите сделать что - то до того, как запрос обрабатывается мнение, или после. Но это вызывается только тогда, когда представление формы загружается впервые, а не при отправке формы. Простой пример в документации. По умолчанию он просто отображает настроенный шаблон и возвращает 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_queryset()
Используется ListView
- определяет список объектов, которые вы хотите отобразить. По умолчанию это просто даст вам все для модели, которую вы указали. Переопределив этот метод, вы можете расширить или полностью заменить эту логику. Джанго документация по данному вопросу.
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()
Этот метод используется для заполнения словаря для использования в качестве контекста шаблона. Например, ListView
будет заполнить результат с get_queryset()
как author_list
в приведенном выше примере. Вероятно, вы будете переопределять этот метод чаще всего, чтобы добавлять элементы для отображения в свои шаблоны.
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
data['page_title'] = 'Authors'
return data
И тогда в вашем шаблоне вы можете ссылаться на эти переменные.
<h1>{{ page_title }}</h1>
<ul>
{% for author in author_list %}
<li>{{ author.name }}</li>
{% endfor %}
</ul>
Теперь, чтобы ответить на ваш главный вопрос, причина, по которой у вас так много методов, состоит в том, чтобы позволить вам легко придерживаться своей пользовательской логики с высокой точностью. Это не только позволяет вашему коду быть более читабельным и модульным, но и более тестируемым.
Документация должна объяснить все. Если все еще не достаточно, вы можете найти источники полезной. Вы увидите, как все реализовано с помощью миксинов, которые возможны только потому, что все разделено.