Ответ 1
Метод отправки принимает запрос и в конечном итоге возвращает ответ. Обычно он возвращает ответ, вызывая (IE отправляя) другой метод, такой как get
. Думайте об этом как о посреднике между запросами и ответами.
Обычно он просто решает, какой метод в классе (например, get()
, post()
и т.д.) Следует использовать (отправлено IE), основываясь на HTTP-методе, который использовался в запросе. Что-то вроде
def dispatch(self, request, *args, **kwargs):
if request.method == 'GET':
return self.get(*args, **kwargs)
elif request.method == 'POST':
return self.post(*args, **kwargs)
elif #... and so on
Вы можете использовать свой собственный метод отправки, чтобы изменить это поведение, чтобы вызывать любые методы, которые вы хотите, которые должны возвращать HTTP-ответ или даже "перехватывать" и изменять аргументы, которые в конечном итоге достигают этих методов. Например, вы можете использовать это, чтобы блокировать/фильтровать определенные виды запросов или даже вводить аргументы...
def dispatch(self, request, *args, **kwargs):
"""Updates the keyword args to always have 'foo' with the value 'bar'"""
if 'foo' in kwargs:
# Block requests that attempt to provide their own foo value
return HttpResponse(status_code=400)
kwargs.update({'foo': 'bar'}) # inject the foo value
# now process dispatch as it otherwise normally would
return super().dispatch(request, *args, **kwargs)
Но ключевая концепция заключается в том, что он является точкой входа для запросов и в конечном итоге отвечает за возвращение ответа.