当特定模块中的所有视图仅在用户被授权时才可用时,或者他们都应该进行相同的检查时,它会发生很多。
我怎样才能避免在整个文件中重复注释?
答案 0 :(得分:6)
在你的网址
url(r'someregexp/$', mydecorator(view.myview.dude), 'name_of_view'),
答案 1 :(得分:2)
使用基于类的视图时,可以为所有这些视图创建基类/ mixin,实现所需的功能(也使用decorators),然后让所有视图都从该基本视图继承。
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
答案 2 :(得分:1)
您可以编写一个调度程序,但如果您有一个模块的网址,那么创建middleware图层可能会更方便。
答案 3 :(得分:0)
当需要添加许多URL时,最好将装饰器包装在一个函数中并调用该函数。
from django.conf.urls import re_path
from . import views
from somewhere import decorator
def url_with_decorator(regex, view, kwargs=None, name=None):
return re_path(regex, decorator(view), kwargs, name)
urlpatterns = [
url_with_decorator(r'^$', views.index, name='index'),
url_with_decorator(r'^any_thing$', views.any_view, name='index'),
# TODO: add url here
]