Django视图的装饰器混合集合。
项目描述
Django的基于类视图混合集合。Django-Decoratormixins还包括一个将视图装饰器转换为基于类视图混合的函数。
用法
如果您有一个装饰器,使用方法非常简单,只需调用DecoratorMixin并将装饰器作为参数传递即可。
from decoratormixins import DecoratorMixin
def my_decorator(f):
# ...
MyDecMixin = DecoratorMixin(my_decorator)
装饰器工厂
许多Django内置的装饰器实际上是装饰器工厂。在这种情况下,在从它们中创建混合之前,需要从它们中获取装饰器。
这里有一个装饰器工厂,它修改了一个视图以在GET请求中要求某个参数
def require_get_param(param):
def actual_decorator(view_func):
@wraps(view_func)
def _wrapped_view_func(request, *args, **kwargs):
if request.GET.get(param, None) is not None:
response = view_func(request, *args, **kwargs)
response.content += param
return response
else:
return HttpResponseNotFound("{} is not present.".format(param))
return _wrapped_view_func
return actual_decorator
为了使用它,我们必须指定我们需要的参数
require_foo_decorator = require_get_param('foo')
现在我们可以调用DecoratorMixin在该装饰器上
RequireFooMixin = DecoratorMixin(require_foo_decorator)
应用混合
一旦您有了所需的混合,就可以将其与基于类的视图混合在一起。
class TestView(View):
def get(self, request):
return HttpResponse("OK")
class TestViewFoo(RequireFooMixin, TestView):
pass
TestViewFoo.as_view()将返回一个可用于您的urls.py中的视图方法。
组合混合
可以为单个类使用多个混合,但顺序很重要。在类定义中最左侧的混合将是外部装饰器。
from decoratormixins.auth import LoginRequiredMixin
from decoratormixins.http import RequireGetMixin
# TestView from above
class LoggedInGetRequestView(LoginRequiredMixin,
RequireGetMixin,
TestView):
pass
包含的混合
以下是所有包含的混合类及其所在模块的列表。
decoratormixins.auth
LoginRequiredMixin
decoratormixins.csrf
CsrfProtectMixin
EnsureCsrfCookieMixin
CsrfExemptMixin
decoratormixins.http
ConditionalPageMixin
RequireGetMixin
RequirePostMixin
RequireSafeMixin
EtagMixin
LastModifiedMixin
decoratormixins.cache
NeverCacheMixin
decoratormixins.clickjacking
XFrameOptionsDenyMixin
XFrameOptionsDenySameoriginMixin
XFrameOptionsDenyExemptMixin
项目详情
django-decoratormixins-1.0.0.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | e2bfd247abed08b0e2245da362a0b43b7149ca2f132da8231019416bf9bb59bf |
|
MD5 | 63faf8ff70469c2f678ee6c84ecee3ca |
|
BLAKE2b-256 | 0923e379e4b9ee77fcf8f97e27c0a469189bf807e08d850623c086ccfbb68af4 |