т. (383) 381-86-26

Блог о создании вебсайтов

 

Django: валидатор типа HTTP запроса

 

Бывает нужно разрешить доступ к той или иной "view" только по определенному методу запроса ещё до входа во вьюху. Тогда можно выкинуть из её тела все лишние проверки "if request.method = ...". Ниже приведен небольшой сниппет, решающий данную задачу. Замечу, что он годится только для случаев, когда вьюха должна реагировать только на определённый типо HTTP запроса.

def http_methods(methods=[]):
    """
        Данный декоратор проверяет метод HTTP запроса,
        который пришел на вьюху, перед тем как 
        она будет вызвана. 

        Удобен тем, что можно задать набор HTTP слов,
        на которые вьюха будет реагировать. В противном случае Http404.
    """
    def decorator(func):
        def wrapper(request, *args, **kwargs):
            if request.method in methods:
                view = func(request, *args, **kwargs)
                return view
            raise Http404
        return wrapper
    return decorator

@http_methods(methods=["POST",])
def some_view(request):

Подпишитесь на рассылку, будет интересно!