2012-08-11 16 views
25

Jak mogę wykryć, z widoków lub pliku szablonu, czy mój administrator jest zalogowany, czy nie? Na przykład, należy sprawę do mojej strony:Django: wykryj logowanie administratora w widoku lub szablonie

  1. użytkownik otwiera /admin/, wprowadź odpowiednie poświadczenia
  2. Następnie użytkownik otworzyć jakąś stronę, na przykład /page/ i istnieje „Dodaj” i „Usuń” przycisków otwiera
  3. użytkownika /admin/ i kliknij "Zaloguj się"
  4. /page/ -> nie ma "Dodaj" i "Usuń" przyciski

wersja Django 1.4

+1

Proszę ustawić odpowiedni komentarz jako rozwiązanie! – erikbwork

Odpowiedz

10

Odpowiedź Josepha jest w porządku dla twojego prostego przypadku, ale w rzeczywistości ani is_staff, ani is_superuser nie pasuje idealnie. Zakładając, że twoja strona to, na przykład, /polls/ (lista obiektów Poll, w aplikacji o nazwie poll), powinieneś przetestować specyficzne poll.change_poll i poll.delete_pollpermissions.

W szablonie:

{% 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 %} 

Albo w widoku using has_perm:

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

Albo w widoku using a decorator:

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

można przypisać te uprawnienia bezpośrednio do użytkownika , do grupy (a następnie umieścić użytkownika w tej grupie) lub ustawiając is_superuser.

56

W szablonach:

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

W widokach:

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

W zależności od potrzeb, is_staff może być lepsze dopasowanie niż is_superuser. Możesz przeczytać o różnicy here.

Powiązane problemy