from djangocg.utils.decorators import decorator_from_middleware from djangocg.middleware.gzip import GZipMiddleware gzip_page = decorator_from_middleware(GZipMiddleware) gzip_page.__doc__ = "Decorator for views that gzips pages if the client supports it."
""" Decorators for views based on HTTP headers. """ from calendar import timegm from functools import wraps from djangocg.utils.decorators import decorator_from_middleware, available_attrs from djangocg.utils.http import http_date, parse_http_date_safe, parse_etags, quote_etag from djangocg.utils.log import getLogger from djangocg.middleware.http import ConditionalGetMiddleware from djangocg.http import HttpResponseNotAllowed, HttpResponseNotModified, HttpResponse conditional_page = decorator_from_middleware(ConditionalGetMiddleware) logger = getLogger('djangocg.request') 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 should be in uppercase. """ def decorator(func): @wraps(func, assigned=available_attrs(func))
import warnings from djangocg.middleware.csrf import CsrfViewMiddleware, get_token from djangocg.utils.decorators import decorator_from_middleware, available_attrs from functools import wraps csrf_protect = decorator_from_middleware(CsrfViewMiddleware) csrf_protect.__name__ = "csrf_protect" csrf_protect.__doc__ = """ This decorator adds CSRF protection in exactly the same way as CsrfViewMiddleware, but it can be used on a per view basis. Using both, or using the decorator multiple times, is harmless and efficient. """ class _EnsureCsrfToken(CsrfViewMiddleware): # We need this to behave just like the CsrfViewMiddleware, but not reject # requests. def _reject(self, request, reason): return None requires_csrf_token = decorator_from_middleware(_EnsureCsrfToken) requires_csrf_token.__name__ = 'requires_csrf_token' requires_csrf_token.__doc__ = """ Use this decorator on views that need a correct csrf_token available to RequestContext, but without the CSRF protection that csrf_protect enforces. """
from djangocg.core.xheaders import populate_xheaders from djangocg.http import HttpResponse from djangocg.utils.decorators import decorator_from_middleware from djangocg.views.generic import View from djangocg.middleware.doc import XViewMiddleware from .models import Article xview_dec = decorator_from_middleware(XViewMiddleware) def xview(request): return HttpResponse() def xview_xheaders(request, object_id): response = HttpResponse() populate_xheaders(request, response, Article, 1) return response class XViewClass(View): def get(self, request): return HttpResponse()
from djangocg.http import HttpResponse from djangocg.template import Template, Context from djangocg.template.response import TemplateResponse from djangocg.test import TestCase, RequestFactory from djangocg.utils.decorators import decorator_from_middleware class ProcessViewMiddleware(object): def process_view(self, request, view_func, view_args, view_kwargs): pass process_view_dec = decorator_from_middleware(ProcessViewMiddleware) @process_view_dec def process_view(request): return HttpResponse() class ClassProcessView(object): def __call__(self, request): return HttpResponse() class_process_view = process_view_dec(ClassProcessView()) class FullMiddleware(object): def process_request(self, request): request.process_request_reached = True def process_view(sef, request, view_func, view_args, view_kwargs): request.process_view_reached = True