Django

Code

Changeset 1016

Show
Ignore:
Timestamp:
10/27/05 20:30:30 (3 years ago)
Author:
jacob
Message:

Fixed #703: added decorators to require that view be called with a given HTTP REQUEST_METHOD

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/views/decorators/http.py

    r810 r1016  
    11""" 
    2 Decorator for views that supports conditional get on ETag and Last-Modified 
    3 headers. 
     2Decorators for views based on HTTP headers. 
    43""" 
    54 
    65from django.utils.decorators import decorator_from_middleware 
    76from django.middleware.http import ConditionalGetMiddleware 
     7from django.utils.httpwrappers import HttpResponseForbidden 
    88 
    99conditional_page = decorator_from_middleware(ConditionalGetMiddleware) 
     10 
     11def require_http_methods(request_method_list): 
     12    """ 
     13    Decorator to make a view only accept particular request methods.  Usage:: 
     14     
     15        @require_http_methods(["GET", "POST"]) 
     16        def my_view(request): 
     17            # I can assume now that only GET or POST requests make it this far 
     18            # ...     
     19             
     20    Note that request methods ARE case sensitive. 
     21    """ 
     22    def decorator(func): 
     23        def inner(request, *args, **kwargs): 
     24            method = request.META.get("REQUEST_METHOD", None)  
     25            if method not in request_method_list: 
     26                raise HttpResponseForbidden("REQUEST_METHOD '%s' not allowed" % method) 
     27            return func(request, *args, **kwargs) 
     28        return inner 
     29    return decorator 
     30 
     31require_GET = require_http_methods(["GET"]) 
     32require_GET.__doc__ = "Decorator to require that a view only accept the GET method." 
     33 
     34require_POST = require_http_methods(["POST"]) 
     35require_POST.__doc__ = "Decorator to require that a view only accept the POST method."