Ich habe eine Website, die ich benutze Authentifizierung verwenden, um den Zugriff auf beschränken. Ich benutze django-allauth
, um Social-Media-Authentifizierung zu behandeln, aber den Zugriff auf staff
Konten nur beschränken (im Django-Admin-Panel festgelegt).Verwenden von Django-Vorlagen mit Benutzerauthentifizierung
Ich möchte eine Vorlage als Header (Bootstrap, Navigationsleiste usw.) verwenden, wobei der Hauptinhalt anschließend geladen wird, oder eine Nachricht, die den Benutzer auffordert, sich anzumelden oder eine Bestätigung durch Admins anzufordern.
Meine Header-Template-Datei: inventory/header.html
<body>
{% load bootstrap3 %}
{% if user.is_authenticated %}
{% if user.is_staff%}
{% block main %}{% endblock %}
{% block scripts %}{% endblock %}
{% else %}
<h1>Please ask an administrator to activate your account</h1>
{% endif %}
{% else %}
<h1>Please login to see this page</h1>
{% endif %}
</body>
Und ein anderer durch die Ansicht namens Vorlage: inventory/home.html
{% include "inventory/header.html" %}
{% block main %}
This is the home page.
{% endblock %}
Aussicht:
def home(request):
return render(request,'inventory/home.html')
Jedes Mal, wenn ich die Ansicht aufrufen, und zwar unabhängig ob der Benutzer eingeloggt ist oder ein Mitarbeiter, der main
Block wird immer angezeigt. Die anderen Fehlermeldungen werden korrekt angezeigt.
Ich versuche zu vermeiden, is_authenticated/is_staff
in alle meine Vorlagen einzufügen. Ich habe auch über die Verwendung der login_required
View Decorator gedacht, aber das löst nicht meine is_staff
Problem.
Sie könnten 'if request.user.is_staff: return render (Anfrage, 'inventory/home.html') else: return render (Anfrage, 'show_something_relevant.html')' in der Home-Ansicht. – kapilsdv
Ich habe darüber nachgedacht, aber ich habe versucht, dies zu vermeiden, wenn Bedingung in jeder Ansicht (ich habe um 15). Ich hatte gehofft, ich könnte die Bedingung innerhalb der Vorlagen erben – user3601503
wird ** Benutzer ** im Kontext von Inventar/header.html übergeben. Wenn nicht 'if request.user' statt' if user' in der Vorlage, wie ' if request.user.is_staff'. – kapilsdv