Heim >Backend-Entwicklung >Python-Tutorial >Detaillierte Erläuterung des Authentifizierungsmoduls von Django (Benutzerauthentifizierung)
Dieser Artikel stellt hauptsächlich die detaillierte Erklärung des Authentifizierungsmoduls von Django (Benutzerauthentifizierung) vor. Jetzt teile ich es mit Ihnen und gebe es als Referenz. Schauen wir uns das gemeinsam an
Das Authentifizierungsmodul ist eine Kapselung der Anmeldeauthentifizierungsmethode. Nachdem wir zuvor den vom Benutzer eingegebenen Benutzernamen und das Kennwort erhalten hatten, mussten wir abfragen, ob dies der Fall ist ist ein Benutzer aus der Benutzertabelle.
Mit dem Authentifizierungsmodul können Sie leicht überprüfen, ob die Anmeldeinformationen des Benutzers in der Datenbank vorhanden sind.
Darüber hinaus kapselt die Authentifizierung auch die Sitzung, damit wir überprüfen können, ob sich der Benutzer angemeldet hat
Methoden in der Authentifizierung
Wenn Sie die Authentifizierungsmodul-Methode verwenden möchten, müssen Sie zuerst das Authentifizierungsmodul importieren
from django.contrib import auth
django.contrib.auth bietet hier viele Methoden Wir stellen hauptsächlich vier davon vor:
1, Authenticate()
bietet eine Benutzerauthentifizierung, dh um zu überprüfen, ob Benutzername und Passwort korrekt sind, im Allgemeinen der Benutzername erforderlich Das Passwort, zwei Schlüsselwortparameter
Wenn die Authentifizierungsinformationen gültig sind, wird ein Benutzerobjekt zurückgegeben. Authenticate() legt ein Attribut für das Benutzerobjekt fest, um zu identifizieren, welches Authentifizierungs-Backend den Benutzer authentifiziert hat. Diese Informationen werden im nachfolgenden Anmeldevorgang benötigt. Wenn wir versuchen, uns ohne Authenticate() bei einem Benutzerobjekt anzumelden, das direkt aus der Datenbank entnommen wird, wird ein Fehler gemeldet! !
user = authenticate(username='someone',password='somepassword')
2, login(HttpRequest, Benutzer)
Diese Funktion akzeptiert ein HttpRequest-Objekt und ein Authentifiziertes Benutzerobjekt
Diese Funktion verwendet das Sitzungsframework von Django, um eine Sitzungs-ID und andere Informationen an einen authentifizierten Benutzer anzuhängen.
from django.contrib.auth import authenticate, login def my_view(request): username = request.POST['username'] password = request.POST['password'] user = authenticate(username=username, password=password) if user is not None: login(request, user) # Redirect to a success page. ... else: # Return an 'invalid login' error message. ...
3. Abmelden (Anfrage) Abmelden des Benutzers
Diese Funktion akzeptiert ein HttpRequest-Objekt und gibt keinen Wert zurück. Wenn diese Funktion aufgerufen wird, werden alle Sitzungsinformationen für die aktuelle Anfrage gelöscht. Auch wenn der Benutzer nicht angemeldet ist, wird bei Verwendung dieser Funktion kein Fehler gemeldet.
from django.contrib.auth import logout def logout_view(request): logout(request) # Redirect to a success page.
4. is_authenticated() des Benutzerobjekts
Anforderungen:
1 Benutzer können auf bestimmte Seiten nur zugreifen, nachdem sie sich angemeldet haben.
2 Wenn der Benutzer auf die Seite zugreift, ohne sich anzumelden, wird direkt zur Anmeldeseite gesprungen
3 Nachdem der Benutzer die Anmeldung abgeschlossen hat Wenn Sie die Anmeldeschnittstelle überspringen, springt der Zugriff automatisch zur zuvor besuchten Adresse
Methode 1:
Verwenden Sie direkt die is_authenticated()-Methode der Authentifizierung, um
def my_view(request): if not request.user.is_authenticated(): return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
Methode 2:Überprüfen Sie anhand von request.user.username. Wenn es leer ist, bedeutet dies, dass Sie nicht angemeldet sind
def my_view(request): if not request.user.username: return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))Methode 3:Django hat einen Dekorator für diese Situation entworfen: login_requierd()
from django.contrib.auth.decorators import login_required @login_required def my_view(request): ...Wenn der Benutzer nicht angemeldet ist, springt er zu Djangos Standard-Anmelde-URL „/accounts/login/“ (dieser Wert kann in der Einstellungsdatei über LOGIN_URL geändert werden). Und übergeben Sie den absoluten Pfad der aktuellen Zugriffs-URL (nach erfolgreicher Anmeldung werden Sie auf diesen Pfad weitergeleitet).
Benutzerobjekt
Benutzerobjektattribute: Benutzername, Passwort (erforderlich) Das Passwort wird mithilfe eines Hash-Algorithmus in der Datenbank gespeichert is_staff: Ob der Benutzer über Administratorrechte für die Website verfügt.is_active: Ob sich der Benutzer anmelden darf, auf „Falsch“ gesetzt, Sie können dem Benutzer die Anmeldung verbieten, ohne die zu löschen user2.1. is_authenticated()
Wenn es sich um ein echtes User-Objekt handelt, ist der Rückgabewert immer True. Wird verwendet, um zu überprüfen, ob der Benutzer die Authentifizierung bestanden hat. Das Bestehen der Authentifizierung bedeutet nicht, dass der Benutzer über Berechtigungen verfügt, noch wird überprüft, ob der Benutzer aktiv ist. Es bedeutet lediglich, dass der Benutzer die Authentifizierung erfolgreich bestanden hat. Diese Methode ist sehr wichtig. Verwenden Sie request.user.is_authenticated() im Hintergrund, um festzustellen, ob sich der Benutzer angemeldet hat. Wenn wahr, request.user.name2.2, Benutzer erstellen
Verwenden Sie die Hilfsfunktion „create_user“, um einen Benutzer zu erstellen:from django.contrib.auth.models import User user = User.objects.create_user(username='',password='',email='')
2.3, check_password(passwd)
user = User.objects.get(username=' ') if user.check_password(passwd): ......Wenn der Benutzer das Passwort ändern muss, muss er zuerst das ursprüngliche Passwort eingeben. Wenn die angegebene Zeichenfolge die Passwortprüfung besteht, geben Sie True zurück Verwenden Sie set_password(), um das Passwort zu ändern
user = User.objects.get(username='') user.set_password(password='') user.save
2.5, einfaches Beispiel
Registrierung :def sign_up(request): state = None if request.method == 'POST': password = request.POST.get('password', '') repeat_password = request.POST.get('repeat_password', '') email=request.POST.get('email', '') username = request.POST.get('username', '') if User.objects.filter(username=username): state = 'user_exist' else: new_user = User.objects.create_user(username=username, password=password,email=email) new_user.save() return redirect('/book/') content = { 'state': state, 'user': None, } return render(request, 'sign_up.html', content)Passwort ändern:
@login_required def set_password(request): user = request.user state = None if request.method == 'POST': old_password = request.POST.get('old_password', '') new_password = request.POST.get('new_password', '') repeat_password = request.POST.get('repeat_password', '') if user.check_password(old_password): if not new_password: state = 'empty' elif new_password != repeat_password: state = 'repeat_error' else: user.set_password(new_password) user.save() return redirect("/log_in/") else: state = 'password_error' content = { 'user': user, 'state': state, } return render(request, 'set_password.html', content)
Benutzertabelle selbst erstellen
Es ist zu beachten, dass alle oben genannten Vorgänge für die von Django automatisch erstellte Tabelle auth_user gelten. Wir können uns die Struktur dieser Tabelle ansehen Dies ist eine von Django automatisch für uns erstellte Benutzertabelle. Wenn Sie das Authentifizierungsmodul verwenden möchten, müssen Sie diese Tabelle verwenden (oder erben).继承表的好处是我们可以增加一些自己需要的字段,并且同时可以使用auth模块提供的接口、方法
下面就讲一下继承auth的方法:
1、导入AbstractUser类,并且写一个自定义的类,继承AbstractUser类,如下:
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): """ 用户信息 """ nid = models.AutoField(primary_key=True) telephone = models.CharField(max_length=11, null=True, unique=True) ......
需要注意的是,UserInfo表里就不需要有auth_user里重复的字段了,比如说username以及password等,但是还是可以直接使用这些字段的,并且django会自动将password进行加密
2、这样写完之后,还需要在setting.py文件里配置:
AUTH_USER_MODEL = 'blog.UserInfo'
这样,django就知道从blog项目下的models去查找UserInfo这张表了
相关推荐:
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Authentifizierungsmoduls von Django (Benutzerauthentifizierung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!