Heim >Backend-Entwicklung >Python-Tutorial >Detaillierte Erläuterung des Authentifizierungsmoduls von Django (Benutzerauthentifizierung)

Detaillierte Erläuterung des Authentifizierungsmoduls von Django (Benutzerauthentifizierung)

不言
不言Original
2018-04-17 10:41:353974Durchsuche

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 user

2.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.name

2.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这张表了

相关推荐:

Django的cookie使用详解

Django中的Ajax使用方法

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn