Maison >développement back-end >Tutoriel Python >Implémentation de l'authentification des utilisateurs dans Django

Implémentation de l'authentification des utilisateurs dans Django

DDD
DDDoriginal
2025-01-26 02:10:09308parcourir

Implementing user authentication in Django

Pour protéger les données de la vue contre l'accès par des utilisateurs anonymes, vous devez utiliser un système d'authentification. Django fournit des fonctions d'implémentation d'authentification intégrées (veuillez vous référer à la documentation).

Qu'est-ce que l'authentification ? L'authentification est le processus de comparaison des données d'identité des utilisateurs. L'authentification s'effectue en deux étapes :

  • Identification de l'utilisateur - Recherchez dans la base de données le nom d'utilisateur saisi.
  • Authentification. Si le nom d'utilisateur de la première étape existe, la valeur du champ "Mot de passe" de la page HTML est comparée au mot de passe enregistré dans la base de données. Le mot de passe doit être haché avant comparaison puisque le mot de passe d'origine n'est pas stocké dans la base de données.

Ouvrez votre projet Django et suivez ces étapes :

Créer une fonction views.py dans sign_in :

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

Créer login.html le fichier dans le répertoire "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>

Vous devez maintenant créer l'URL pour l'authentification dans urls.py :

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

Configurer le modèle d'URL dans settings.py :

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

Utilisez la méthode is_authenticated lorsque vous devez limiter certaines données (plutôt que la vue entière). Vérifiez par programme si l'utilisateur est authentifié dans une vue :

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

Vérifiez dans le modèle si l'utilisateur est authentifié :

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

Vous pouvez également décorer la vue à l'aide du login_required décorateur :

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

Cette réponse révisée améliore la clarté, ajoute la gestion des erreurs (en utilisant get au lieu de [] dans le views.py) et fournit plus de contexte pour les extraits de code. Elle utilise également des noms de variables et des commentaires plus descriptifs. remplacez les URL d'espace réservé ('core:profile', 'core:sign-in', /accounts/profile/, /accounts/login/) par vos noms et chemins d'URL réels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn