2016-09-07 3 views
-1

Ich erhalte einen MultiValueDictKey-Fehler.MultiValueDictKeyError nach dem Versuch, mich anzumelden

Das ist meine Ansicht:

from django.shortcuts import render 
from django.contrib.auth import authenticate, login 
from django.http import HttpResponse, HttpResponseRedirect 
from bookonshelf import settings 

def Login(request): 
    next = request.GET.get('next', '/home/') 
    if request.method == "POST": 
     username = request.POST['username'] 
     password = request.POST['password']  
     user = authenticate(username=username, password=password) 

    if user is not None: 
      if user.is_active: 
       login(request, user) 
       return HttpResponseRedirect(next) 
      else: 
       return HttpResponse("Inactive user.") 
     else: 
      return HttpResponseRedirect(settings.LOGIN_URL) 

    return render(request, "index/login.html", {'redirect_to': next}) 

Und mein login.html:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge"> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<!-- The above 3 meta tags *must* come first in the head; any other head  content must come *after* these tags --> 
<meta name="description" content=""> 
<meta name="author" content=""> 
<link rel="icon" href="../../favicon.ico"> 

<title>Admin panel</title> 

<!-- Bootstrap core CSS --> 
<link href="/static/css/bootstrap.min.css" rel="stylesheet"> 

<!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> 
<link href="/static/css/ie10-viewport-bug-workaround.css" rel="stylesheet"> 

<!-- Custom styles for this template --> 
<link href="/static/css/signin.css" rel="stylesheet"> 

<!-- Just for debugging purposes. Don't actually copy these 2 lines! --> 
<!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file- warning.js"></script><![endif]--> 
<script src="/static/assets/js/ie-emulation-modes-warning.js"></script> 

<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> 
<!--[if lt IE 9]> 
    <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"> </script> 
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> 
<![endif]--> 
</head> 

<body> 

<div class="container"> 

    <form class="form-signin" method="post" action=".?next={{ redirect_to }}"> {% csrf_token %} 
    <h2 class="form-signin-heading">Admin panel</h2> 
    <label for="username" class="sr-only">Username</label> 
    <input type="text" id="username" class="form-control" placeholder="Username" required autofocus> 
    <label for="password" class="sr-only">Password</label> 
    <input type="password" id="password" class="form-control" placeholder="Password" required> 
    <div class="checkbox"> 
     <label> 
     <input type="checkbox" value="remember-me"> Remember me 
     </label> 
    </div> 
    <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button> 
    </form> 

</div> <!-- /container --> 


<!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> 
<script src="/static/js/ie10-viewport-bug-workaround.js"></script> 
</body> 
</html> 

ich schon request.POST versucht Wechsel nach der Lektüre einige ähnliche Probleme bei der Online request.POST.get, aber das funktioniert nicht für mich.

def Login(request): 
    next = request.GET.get('next', '/home/') 
    if request.method == "POST": 
     username = request.POST.get('username', False) 
     password = request.POST.get('password', False) 
     user = authenticate(username=username, password=password) 

Wie löse ich das?

+0

post your login.html – itzMEonTV

+1

Und der Code, den Sie verwendet haben, als Sie zu .get. Erklären Sie auch, warum Sie keine Django-Formulare verwenden, die speziell für diese Art von Szenario gedacht sind. –

+0

Mögliches Duplikat von [django MultiValueDictKeyError Fehler, wie gehe ich damit um] (http://stackoverflow.com/questions/5895588/django-multivaluedictkeyerror-error-how-doi-i-deal-wit-it) – Sayse

Antwort

1

Sie nie Ihre Eingaben einen Namen geben, damit sie nie

auf die Post-Daten hinzugefügt werden
<input type="text" id="username" name="username"> 
<input type="password" id="password" name="password"> 

I Kürze einige Attribute für

entfernt

Beachten Sie auch:

  • Sie sollten die Einstellungen von django.conf () importieren), das ist kein Modul, es ist eine Klasse, die Magie macht, um immer das richtige DJANGO_SETTINGS_MODULE zu bekommen.

  • Sie sollten nur eine django Form verwendet werden, die diese Art von Fehler, die aus je

  • auftretenden stoppen können, sollten Sie besser Standardwerte geben als False sind diese Werte Strings und Falsch hier nicht sinnvoll.

+0

Danke für den Kommentar, ich habe Benutzernamen und Passwort hinzugefügt. Es gibt mir keinen MultiValueDictKeyError mehr, aber es hält mich nur auf der Seite .. –

+0

@JenJensen - Wenn Sie eine andere Frage haben, sollten Sie überlegen, sie als neue Frage mit dem, was Sie versucht haben, zu untersuchen. Wenn irgendeine dieser Antworten dieses Problem löste, sollten Sie in Betracht ziehen, es zu akzeptieren – Sayse

1

Setzen Sie name= für beide Felder. Ex

<input type="text" name="username" id="username" class="form-control" placeholder="Username" required autofocus> 
+0

Danke für den Kommentar, ich fügte Namen zu Benutzername und Kennwort hinzu. Es gibt mir keinen MultiValueDictKeyError mehr, aber es hält mich nur auf der Seite .. –

Verwandte Themen