7

Django で、「管理者」権限を持つユーザー向けの追加機能を備えたテンプレートを実装する最良の方法は何ですか?

管理者専用のまったく異なる一連のビューを作成する必要があるのか​​ 、それとも「ユーザーが管理者の場合」などの既存のビューやテンプレートに統合する必要があるのか​​ わかりません。

Djangoでこれを行う標準的な方法はありますか?

4

3 に答える 3

2

私は、ビュー レイヤーからできるだけ多くのロジックを除外することを提唱しています (MVC デザイン パターンについて一般的に言えば)。では、デコレーターを使用して、特権に基づいてユーザーをさまざまなビューに誘導してみませんか? urls.py で、管理者用のパターンを定義します。

url(r'^admin/$', 'user.views.admin_index'),
#do so for your other admin views, maybe more elegantly than this quick example

次に、管理者でないユーザーを追い出すデコレーターを定義します。

def redirect_if_not_admin(fn):
def wrapper(request):
    if request.user.is_staff():
        return fn(request)
    #or user.is_superuser(), etc
    else:
        return HttpResponseRedirect('/Permission_Denied/')
return wrapper

そして、あなたの管理者ビューで

@redirect_if_not_admin
def index(request):
##do your thing 

これは、他の 2 つの回答よりも多くのコードであり、間違いではありません。ビューが乱雑にならないようにすることは、個人的な好みにすぎません。

于 2013-12-26T15:34:05.207 に答える
2

テンプレートコンテキストでユーザーを利用できる場合は、次のことができます。

{% if user.is_active and user.is_staff %}
    Only the admin will see this code. For example include some admin template here:
   {% include "foo/bar.html" %}
{% endif %}

ユーザーは、使用するテンプレートで使用可能にRequestContextなり、TEMPLATE_CONTEXT_PROCESSORS設定にdjango.contrib.auth.context_processors.authはデフォルトである が含まれます。テンプレート内の認証データを参考にしてください。

于 2012-02-26T10:46:05.137 に答える