Ich versuche, die Benutzer-ID in der Sitzung mit django.contrib.auth.login zu speichern. Aber es funktioniert nicht wie erwartet.
Ich erhalte eine Fehleranmeldung () benötigt genau 1 Argument (2 angegeben)
Mit login (user) erhalte ich AttributeError unter / login / User 'Objekt hat kein Attribut' Methode '
Ich verwende ein leicht modifiziertes Beispielformular http://docs.djangoproject.com/en/dev/topics/auth/ :
from django.shortcuts import render_to_response
from django.contrib.auth import authenticate, login
def login(request):
msg = []
if request.method == 'POST':
username = request.POST['u']
password = request.POST['p']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
msg.append("login successful")
else:
msg.append("disabled account")
else:
msg.append("invalid login")
return render_to_response('login.html', {'errors': msg})
An login.html ist nichts Besonderes:
<html>
<head>
<title></title>
</head>
<body>
<form action="/login/" method="post">
Login: <input type="text" name="u">
<br/>
Password: <input type="password" name="p">
<input type="submit" value="Login">
</form>
{% if errors %}
<ul>
{% for error in errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</body>
</html>
Hat jemand eine Idee, wie login () funktioniert.
Antworten:
Ihre Ansichtsfunktion wird ebenfalls aufgerufen
login
, und der Aufruf von wirdlogin(request, user)
am Ende als Versuch interpretiert, diese Funktion rekursiv aufzurufen:Um dies zu vermeiden, benennen Sie Ihre Ansichtsfunktion um oder verweisen Sie auf eine andere Weise auf die
login
vondjango.contrib.auth
. Sie können beispielsweise den Import ändern, um die Anmeldefunktion umzubenennen:quelle
Eine mögliche Lösung:
Jetzt überschreibt Ihr Ansichtsname den Ansichtsnamen von Django nicht mehr.
quelle
Ein anderer Weg:
dann anrufen
auth_login(request, user)
stattlogin(request, user)
.quelle