Heim > Backend-Entwicklung > Python-Tutorial > Implementierung der Benutzerauthentifizierung in Django

Implementierung der Benutzerauthentifizierung in Django

DDD
Freigeben: 2025-01-26 02:10:09
Original
238 Leute haben es durchsucht

Implementing user authentication in Django

Um die Daten in der Ansicht vor dem Zugriff anonymer Benutzer zu schützen, müssen Sie ein Authentifizierungssystem verwenden. Django bietet integrierte Authentifizierungsimplementierungsfunktionen (siehe Dokumentation).

Was ist Authentifizierung? Bei der Authentifizierung handelt es sich um den Vergleich von Benutzeridentitätsdaten. Die Authentifizierung erfolgt in zwei Schritten:

  • Benutzeridentifikation – Durchsuchen Sie die Datenbank nach dem eingegebenen Benutzernamen.
  • Authentifizierung. Wenn der Benutzername aus dem ersten Schritt vorhanden ist, wird der Wert des Feldes „Passwort“ in der HTML-Seite mit dem in der Datenbank gespeicherten Passwort verglichen. Das Passwort muss vor dem Vergleich gehasht werden, da das Originalpasswort nicht in der Datenbank gespeichert ist.

Öffnen Sie Ihr Django-Projekt und befolgen Sie diese Schritte:

Funktion views.py in sign_in erstellen:

<code class="language-python">from django.contrib.auth import authenticate, login
from django.shortcuts import redirect


def sign_in(request):
    username = request.POST.get('username')
    password = request.POST.get('password')
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        return redirect('core:profile')  # 假设您已定义了名为 'profile' 的 URL 名称
    else:
        return redirect('core:sign-in') # 假设您已定义了名为 'sign-in' 的 URL 名称</code>
Nach dem Login kopieren

Erstellen Sie eine login.html-Datei im Verzeichnis „templates“:

<code class="language-html"><form method="post">
    {% csrf_token %}
    <table>
        <tr>
            <td>{{ form.username.label_tag }}</td>
            <td>{{ form.username }}</td>
        </tr>
        <tr>
            <td>{{ form.password.label_tag }}</td>
            <td>{{ form.password }}</td>
        </tr>
    </table>
    <button type="submit">登录</button>
</form></code>
Nach dem Login kopieren

Jetzt müssen Sie die URL für die Authentifizierung in urls.py erstellen:

<code class="language-python">from django.urls import path
from .views import sign_in


app_name = 'core'

urlpatterns = [
    path('sign-in/', sign_in, name='sign-in'),
]</code>
Nach dem Login kopieren

URL-Muster konfigurieren in settings.py:

<code class="language-python">LOGIN_REDIRECT_URL = '/accounts/profile/'
LOGIN_URL = '/accounts/login/'
LOGOUT_REDIRECT_URL = '/'</code>
Nach dem Login kopieren

Verwenden Sie die Methode is_authenticated, wenn Sie bestimmte Daten (und nicht die gesamte Ansicht) einschränken müssen. Überprüfen Sie programmgesteuert, ob der Benutzer in einer Ansicht authentifiziert ist:

<code class="language-python">if request.user.is_authenticated:
    # 对已认证用户执行操作
    ...
else:
    # 对匿名用户执行操作
    ...</code>
Nach dem Login kopieren

Überprüfen Sie in der Vorlage, ob der Benutzer authentifiziert ist:

<code class="language-html">{% if user.is_authenticated %}
    <p>您的帐户无权访问此页面。要继续,请使用具有访问权限的帐户登录。</p>
{% else %}
    <p>请登录以查看此页面。</p>
{% endif %}</code>
Nach dem Login kopieren

Außerdem können Sie die Ansicht mit dem login_required Decorator dekorieren:

<code class="language-python">from django.contrib.auth.decorators import login_required


@login_required(redirect_field_name='login_page')
def my_protected_view(request):
    ...</code>
Nach dem Login kopieren

Diese überarbeitete Antwort verbessert die Klarheit, fügt Fehlerbehandlung hinzu (unter Verwendung von get anstelle von []) und bietet mehr Kontext für die Codeausschnitte. Außerdem werden aussagekräftigere Variablennamen und Kommentare verwendet Ersetzen Sie Platzhalter-URLs (views.py, 'core:profile', 'core:sign-in', /accounts/profile/) durch Ihre tatsächlichen URL-Namen und -Pfade./accounts/login/

Das obige ist der detaillierte Inhalt vonImplementierung der Benutzerauthentifizierung in Django. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage