示例#1
0
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."
示例#2
0
"""
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))
示例#3
0
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.
"""

示例#4
0
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()
示例#5
0
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