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

はい、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 に答える
0

デフォルトの機能を拡張しようとしている場合、特にそれがユーザー許可のようにデリケートなものである場合、唯一の現実的なオプションはサブクラス化することです。すべてのクラス定義に が含まれている場合でも、すべてのビューをサブクラス化するようになりました。これは、template_name後で拡張する方がはるかに簡単だからです。

サブクラス化により、コードを完全に制御できます。or のような重要なメソッドをオーバーライドする必要はありませんが、get()orpost()のような補助的なものはget_context_data()、必要form_valid()なほとんどのチェックと検証を処理できます。

于 2012-05-29T05:56:59.637 に答える