48

管理者ユーザーがログインしているかどうかを、ビューまたはテンプレートファイルからどのように検出できますか?たとえば、私のサイトのユースケース:

  1. ユーザーが開き/admin/、正しいクレデンシャルを入力します
  2. 次に、ユーザーがページを開くと、たとえば/page/、[追加]ボタンと[削除]ボタンがあります
  3. ユーザーが開き/admin/、[ログアウト]をクリックします
  4. /page/->「追加」ボタンと「削除」ボタンはありません

Djangoバージョン1.4

4

3 に答える 3

123

テンプレート内:

{% if user.is_superuser %}
    <p>Hello, admin.</p>
{% else %}
    <p>Hello, ordinary visitor.</p>
{% endif %}

ビューで:

if request.user.is_superuser:
    # Hello, admin.
else:
    # Hello, ordinary visitor.

ニーズによってはis_staff、 よりも適している場合がありis_superuserます。違いについてはこちらをご覧ください。

于 2012-08-11T18:06:54.660 に答える
28

ジョセフの答えはあなたの単純なケースでは問題ありませんが、実際にはどちらis_staffis_superuser完全に適合していません。たとえば、ページが(というアプリ内のオブジェクト/polls/のリスト) であると仮定すると、特定のおよびパーミッションをテストする必要があります。Pollpollpoll.change_pollpoll.delete_poll

テンプレートでは:

{% for poll in polls %}
    {% if perms.poll.change_poll %}<a href='/polls/edit/{{ poll.id }}'>Edit</a>{% endif %}
    {% if perms.poll.delete_poll %}<a href='/polls/delete/{{ poll.id }}'>Delete</a>{% endif %}
{% endfor %}

またはを使用has_permしてビューで:

if not request.user.has_perm('poll.change_poll'):
    return HttpResponseForbidden('Nope!')

または、デコレータを使用したビューで:

@permission_required('poll.change_poll')
def edit_poll(request, poll_id):
    # ....

これらのアクセス許可は、ユーザー、グループに直接割り当てる (そして、ユーザーをそのグループに入れる) か、または を設定して割り当てることができますis_superuser

于 2012-08-11T18:43:23.993 に答える