如何将装饰器应用于django中的所有视图(模块)

SeM*_*eKh 8 django python-decorators

当特定模块中的所有视图仅在用户被授权时才可用时,或者它们都应该执行相同的检查时,它会发生很多.

我怎么能避免在整个文件中重复注释?

Hen*_*son 7

在你的网址中

url(r'someregexp/$', mydecorator(view.myview.dude), 'name_of_view'),
Run Code Online (Sandbox Code Playgroud)


Ber*_*ant 2

使用基于类的视图时,您可以为所有这些视图创建一个基类/混合,以实现所需的功能(也使用装饰器),然后让所有视图都从此基视图继承。

from django.views.generic import TemplateView

class BaseView(TemplateView):

    def get(self, request, *args, **kwargs):
        # do some checking here
        if not request.user.is_authenticated():
            # do something if anonymous user
        return super(BaseView, self).get(request, *args, **kwargs)


class MyView(BaseView):
    pass
Run Code Online (Sandbox Code Playgroud)