当特定模块中的所有视图都应该仅在用户获得授权时才可用时,这种情况经常发生,或者它们都应该进行相同的检查。
我怎样才能避免在整个文件中重复注释?
在您的网址中
url(r'someregexp/$', mydecorator(view.myview.dude), 'name_of_view'),
当使用基于类的视图时,您可以为所有这些视图创建一个基类/mixin,它实现了所需的功能(也使用装饰器),然后让所有视图都从这个基础视图继承。
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
您可以编写一个调度程序,但如果您有很多模块的 url,那么创建一个中间件层可能会更方便。
当需要添加许多 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
]