Skip to content

Commit

Permalink
Fixed #703: added decorators to require that view be called with a gi…
Browse files Browse the repository at this point in the history
…ven HTTP REQUEST_METHOD

git-svn-id: http://code.djangoproject.com/svn/django/trunk@1016 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
jacobian committed Oct 28, 2005
1 parent c3377c1 commit e7c870c
Showing 1 changed file with 28 additions and 2 deletions.
30 changes: 28 additions & 2 deletions django/views/decorators/http.py
@@ -1,9 +1,35 @@
""" """
Decorator for views that supports conditional get on ETag and Last-Modified Decorators for views based on HTTP headers.
headers.
""" """


from django.utils.decorators import decorator_from_middleware from django.utils.decorators import decorator_from_middleware
from django.middleware.http import ConditionalGetMiddleware from django.middleware.http import ConditionalGetMiddleware
from django.utils.httpwrappers import HttpResponseForbidden


conditional_page = decorator_from_middleware(ConditionalGetMiddleware) conditional_page = decorator_from_middleware(ConditionalGetMiddleware)

def require_http_methods(request_method_list):
"""
Decorator to make a view only accept particular request methods. Usage::
@require_http_methods(["GET", "POST"])
def my_view(request):
# I can assume now that only GET or POST requests make it this far
# ...
Note that request methods ARE case sensitive.
"""
def decorator(func):
def inner(request, *args, **kwargs):
method = request.META.get("REQUEST_METHOD", None)
if method not in request_method_list:
raise HttpResponseForbidden("REQUEST_METHOD '%s' not allowed" % method)
return func(request, *args, **kwargs)
return inner
return decorator

require_GET = require_http_methods(["GET"])
require_GET.__doc__ = "Decorator to require that a view only accept the GET method."

require_POST = require_http_methods(["POST"])
require_POST.__doc__ = "Decorator to require that a view only accept the POST method."

0 comments on commit e7c870c

Please sign in to comment.