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

Implementierung der Benutzerauthentifizierung in Django

DDD
DDDOriginal
2025-01-26 02:10:09305Durchsuche

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>

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>

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>

URL-Muster konfigurieren in settings.py:

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

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>

Ü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>

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>

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!

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