3 votes

Modifications du système d'authentification de Django

Je suis nouveau dans le système d'authentification de Django et je ne parviens pas à trouver la bonne méthode de débogage.

Je veux créer une fonction pour gérer les demandes de connexion et j'ai fait les étapes nécessaires pour le faire.

  1. création d'un chemin pour l'url de connexion dans le fichier URLS.py du projet principal.

     path('members/', include('django.contrib.auth.urls')),
     path('members/', include('members.urls')),
  2. création d'une url de connexion dans l'application des membres qui pointe vers une fonction créée dans views.py

    urlpatterns = [
     path('login/', views.login_user, name='login'),]
  3. défini ce qu'il faut faire lorsque l'utilisateur arrive sur une url spécifique

    def login_user(request):
     if request.method == 'POST':
         print('-'*100)
         username = request.POST['username']
         password = request.POST['password']
         user = authenticate(request, username=username, password=password)
         if user is not None:
             login(request, user)
             messages.success(request, ("You are now logged in"))
             return redirect('index')
         else:
             messages.success(request, ("Invalid credentials"))
             return redirect('login')
     return render(request, 'registration/Login.html')
  4. J'ai créé une page de connexion dans le dossier des modèles.

    {% extends 'Base.html'%}
    {% block title %}
         Login to the Blog Page
     {% endblock %}
    {% block content%}
    <h1>Members Login</h1>
    <div class="form-group">
    
     <form method="POST" action="">
         {% csrf_token %}
         <div class="mb-3">
             <label for="exampleInputEmail1" class="form-label">User Name</label>
             <input type="text" class="form-control" name = "username">
             <div id="emailHelp" class="form-text">We'll never share your email with 
    anyone else.</div>
           </div>
           <div class="mb-3">
             <label for="exampleInputPassword1" class="form-label">Password</label>
             <input type="password" class="form-control" name="password">
           </div>
         <button type="submit" class="btn btn-primary">Login</button>
      </form>
     <br>
     </div>
    {% endblock %}

Maintenant, lorsque j'arrive à /members/login après avoir soumis les détails de l'utilisateur, l'instruction print de la méthode post n'est pas imprimée dans la console. Je soupçonne donc que la requête post n'est pas redirigée vers la fonction login_user. Quelqu'un peut-il m'aider à identifier la raison ?

2voto

CommuSoft Points 6439

Djnago lancera la vue qu'il trouve en premier pour le chemin members/login et c'est la vue de connexion du django.contrib.auth module. Vous pouvez intervertir l'ordre des vues pour visiter les login de votre point de vue :

urlpatterns = [
    path('members/', include('members.urls')),  # 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X