美好的一天,
我的URLConf中有以下内容:
from django.contrib.auth.decorators import user_passes_test
urlpatterns = patterns('',
(r'^manage/(?P<pk>\d+)/$', user_passes_test(lambda u: (u.is_authenticated()))
UpdateView.as_view(model=Organization, success_url="/organizations/updated/", template_name="organization/manage.html",))),
因此,只有经过身份验证的用户才能通过网址访问视图功能。
问题:除了对通用视图进行子类化外,有没有办法检查URL中嵌入的pk?我想进一步验证尝试访问Update功能的用户是否具有所需的权限。
documentation没有详细说明,我正在努力寻找任何其他参考资料。
答案 0 :(得分:0)
如果您正在寻求扩展默认功能,特别是如果它具有与用户权限一样精细的东西,唯一真正的选择是子类。我已经转向将所有视图子类化,即使所有类定义都是template_name
,因为稍后扩展会更简单。
子类化使您可以完全控制代码。但是,不需要覆盖get()
或post()
等关键方法 - get_context_data()
或form_valid()
等辅助内容可以处理您需要的大多数检查和验证。< / p>
答案 1 :(得分:0)
是的,您只需要更熟悉python装饰器:
def my_custom_check(view):
def view_wrap(request, *args, **kwargs):
pk = kwargs['pk']
# do your check here
return view(request, *args, **kwargs)
return view_wrap
像这样使用:
(r'^manage/(?P<pk>\d+)/$', my_custom_check(UpdateView.as_view(model=Organization, ...))),