Как перенаправить из require_http_methods без использования промежуточного ПО?
Я использовал декоратор @require_http_methods
в своем коде для страницы logout, но я не могу понять, как правильно перенаправить пользователя при ошибке метода
Предлагается создать промежуточное ПО там: django require_http_methods. default page
Но интересно, есть ли более простой способ?
(Я знаю, что могу просто проверить наличие метода вручную, например, так: if method == 'POST'
) Но я хочу знать, какова лучшая практика.
Вы можете сделать пользовательский декоратор на основе декоратора @require_http_methods
[Django-doc], изменив его исходный код [GitHub] так, чтобы он перенаправлял вместо возврата ошибки HTTP 405:
from django.shortcuts import redirect
def require_http_methods_redirect(request_method_list, redirect_to=None):
def decorator(func):
@wraps(func)
def inner(request, *args, **kwargs):
if request.method not in request_method_list:
if redirect_to is not None:
return redirect(redirect_to)
else:
response = HttpResponseNotAllowed(request_method_list)
log_response(
'Method Not Allowed (%s): %s', request.method, request.path,
response=response,
request=request,
)
return response
return func(request, *args, **kwargs)
return inner
return decorator
тогда в представлении выхода из системы вы можете указать redirect_to
:
from django.urls import reverse_lazy
@require_http_methods_redirect(['POST'], redirect_to=reverse_lazy('name-of-some-view'))
def my_view(request):
# …