我有一些自定义代码想要在调用任何管理 View 之前执行。从概念上看,这似乎很简单;只需创建一个执行我想要的操作的包装 View ,然后将所有管理 View 包装在其中。但我该怎么做呢?
这是我的主 urls.py 的相关部分:
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
)
有没有一种方法可以包装所有管理 View ,而不必单独指定每个管理 View ?
您可以通过创建单独的 urls
模块、导入 admin.site.urls
,然后动态构建 urlpatterns
来装饰所有路由函数基于您从 admin.site.urls.urlpatterns
读取的数据。我不建议修改管理 urls
模块中的路由函数,因为这些模式是通过静态引用公开的。
但正确的方法是写 custom middleware它可以在与装饰器相同的阶段插入 View 处理:在通过请求调用 View 之前,在抛出异常或返回响应之后。
我是一名优秀的程序员,十分优秀!