Как перенаправить из 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):
    # …
Вернуться на верх