Django で、「管理者」権限を持つユーザー向けの追加機能を備えたテンプレートを実装する最良の方法は何ですか?
管理者専用のまったく異なる一連のビューを作成する必要があるのか 、それとも「ユーザーが管理者の場合」などの既存のビューやテンプレートに統合する必要があるのか わかりません。
Djangoでこれを行う標準的な方法はありますか?
Django で、「管理者」権限を持つユーザー向けの追加機能を備えたテンプレートを実装する最良の方法は何ですか?
管理者専用のまったく異なる一連のビューを作成する必要があるのか 、それとも「ユーザーが管理者の場合」などの既存のビューやテンプレートに統合する必要があるのか わかりません。
Djangoでこれを行う標準的な方法はありますか?
私は、ビュー レイヤーからできるだけ多くのロジックを除外することを提唱しています (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 つの回答よりも多くのコードであり、間違いではありません。ビューが乱雑にならないようにすることは、個人的な好みにすぎません。
テンプレートコンテキストでユーザーを利用できる場合は、次のことができます。
{% 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
はデフォルトである が含まれます。テンプレート内の認証データを参考にしてください。