URLConf:根据用户权限限制对通用视图的访问 - 检查url参数

时间:2012-05-29 05:19:46

标签: django url authentication django-class-based-views

美好的一天,

我的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没有详细说明,我正在努力寻找任何其他参考资料。

2 个答案:

答案 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, ...))),