0

再会,

我的 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 访问视图功能。

问题:除了对通用视图进行子类化之外,有没有办法检查嵌入在 URL 中的 pk?我想进一步验证尝试访问更新功能的用户是否具有所需的权限。

文档没有详细介绍这个细节,我正在努力寻找任何其他参考。

4

2 回答 2

0

如果您希望扩展默认功能,特别是如果它具有像用户权限这样微妙的功能,那么唯一真正的选择是子类化。我已经转向对我所有的视图进行子类化,即使所有类定义都是 a template_name,因为以后扩展它要简单得多。

子类化使您可以完全控制您的代码。没有必要重写像 or 这样的关键方法——像orget()这样的post()辅助方法可以处理您需要的大多数检查和验证。get_context_data()form_valid()

于 2012-05-29T05:56:59.637 回答
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, ...))),
于 2012-05-29T07:53:46.193 回答