2017-12-30 49 views
1

Ich versuche, eine Website mit Django zu erstellen, und ich habe mehrere Ansichten, die Logins erfordern. Ich kann jedoch nicht herausfinden, wie Benutzer authentifiziert werden. Ich bin extrem neu in der Webentwicklung (das ist mein erstes Projekt), also bitte nachfragen, wenn ich nicht klar bin. Hier ist ein Code, der Kontext liefern könnten:Ich kann Benutzer in Django App nicht authentifizieren

Auszug aus rushsite/Rush/views.py:

from django.http import HttpResponseRedirect 
from django.contrib.auth import authenticate, login 
from django.contrib.auth.decorators import login_required 

def login_user(request): 
    if request.method == "POST": 
     username = request.POST.get('username') 
     password = request.POST.get('password') 
     user = authenticate(username=username, password=password) 
     if user is not None: 
      login(request, user) 
      return HttpResponseRedirect('list') 
     else: 
      return render(request, "registration/login.html") 
    else: 
     return render(request, "registration/login.html") 

Meine login.html Datei:

<!DOCTYPE html> 
<html lang="en"> 

<head> 
    <meta charset="utf-8"> 
</head> 

<body> 
    <div class="container"> 
     <div class="top"> 
      <h1 id="title" class="hidden"><span id="logo">Delta Sig<span> Recruitment</span></span></h1> 
     </div> 
     <div class="login-box animated fadeInUp"> 
      <div class="box-header"> 
       <h2>Log In</h2> 
      </div> 
      <form method="post"> 
       {% csrf_token %} 
       <label for="username">Username</label> 
       <br/> 
       <input type="text" id="username"> 
       <br/> 
       <label for="password">Password</label> 
       <br/> 
       <input type="password" id="password"> 
       <br/> 
       <button type="submit">Sign In</button> 
       <br/> 
       <br/> 
       {% if request.META.HTTP_REFERER == "http://127.0.0.1:8000/login/" %} Incorrect username or password. {% endif %} 
      </form> 
     </div> 
    </div> 
</body> 

Auszug aus rushsite/Rush/models .py:

Wenn ich auf "Senden" auf meinem Formular klicke, benutze die Anmeldeinformationen, von denen ich weiß, dass sie gültig sind, der Benutzer = None also es leitet mich einfach zurück auf die Login-Seite. Was mache ich falsch?

+0

ich denke, es könnte mit der Tatsache zu tun hat, dass ich einen Bruder Modell, das ein OneToOneField ist mit Benutzer. Ich bin mir nicht ganz sicher, was das bedeutet. –

+0

Können Sie debuggen, dass die Werte, von denen Sie glauben, dass Sie sie posten, tatsächlich in der Ansicht ankommen? – schwobaseggl

Antwort

0

Da Sie mit Ihrer Anmeldeansicht nichts Ungewöhnliches tun, sollten Sie verwenden. Dies vermeidet die normalen Arten von Problemen, die sich einschleichen können, wenn das Rad neu erfunden wird.

Es enthält auch einige zusätzliche Funktionalität, wie die Verwendung von django Formen und Umleitung bei erfolgreicher Anmeldung basierend auf dem ?next= GET arg.

In diesem Fall benötigen Sie LoginView.

Ich würde auch empfehlen, in [Django eingebauten Formen zu suchen (https://docs.djangoproject.com/en/2.0/topics/forms/). Wenn Sie haben schreiben müssen Sie Ihre eigene Ansicht für diese, Formulare wäre gut für die Validierung. Sie können simplify your template code und Validierungsfehler entsprechend anzeigen.

das Formular verwenden, die automatisch mit LoginView kommt, könnte die <form> in Ihrer Vorlage reduziert werden:

<form method="post"> 
    {% csrf_token %} 
    {{ form.as_p }} 
</form> 
Verwandte Themen