Ich habe Probleme beim Anmelden von Benutzern. Ich habe folgende Ansichten und Vorlage:Django Benutzer Login Formular Benutzer ist keine
views.py
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = auth.authenticate(username=username, password=password)
if user is not None:
if user.is_active:
auth.login(request, user)
return HttpResponseRedirect('/')
else:
return HttpResponseRedirect('disabled account')
else:
return HttpResponseRedirect('/invalid')
else:
return render(request, 'login_page.html', {})
login_page.html
{% block content %}
{% if form.errors %}
<p class="error"> sorry, thats not a valid username or password</p>
{% endif %}
<form action="/login/" method="post">
<label for="username">User name:</label>
<input type="text" name="username" value="" id="username">
<label for="password">Password:</label>
<input type="text" name="password" value="" id="password">
<input type="submit" value="login" />
</form>
{% endblock %}
Mein Problem ist, wenn ich in dem Login-Formular treffen, egal, was die Werte sind, wird die Seite zur/invald/url umgeleitet. Ich habe einen Benutzer mit der Admin-Funktion eingerichtet, aber ich bekomme immer noch diesen Fehler. Weiß jemand, was das Problem sein könnte?
Benötige ich eine forms.py-Datei mit etwas darin?
Aktualisiert Ansichten:
def login(request):
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data["username"]
password = form.cleaned_data["password"]
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
return redirect('loggedin.html')
else:
return HttpResponse("Account deleted or disabled")
return render(request, "login_page.html", {'form': form})
aktualisierter Form:
from django import forms
from django.contrib.auth import authenticate, login, logout, get_user_model
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
def clean(self, *args, **kwargs):
username = self.cleaned_data.get("username")
password = self.cleaned_data.get("password")
if username and password:
user = authenticate(username=username, password=password)
if not user:
raise forms.ValidationError("User does not exist.")
if not user.is_active:
raise forms.ValidationError("User is no longer active.")
return super(UserLoginForm, self).clean(*args, **kwargs)
aktualisiert login_page.html
{% block content %}
{% if form.errors %}
<p class="error"> sorry, thats not a valid username or password</p>
{% endif %}
<form action="{% url 'login' %}" method="post">
{{ form }}
<input type="submit" value="login" />
</form>
{% endblock %}
Urls:
url(r'^admin/', admin.site.urls),
url(r'^login/', views.login, name='login'),
url(r'^logout/', views.logout, name='logout'),
url(r'^invalid/', views.invalid_login, name='invalid_login'),
url(r'^loggedin/', views.loggedin, name='loggedin'),
url(r'^$', views.index, name='index'),
Der Benutzereintrag existiert und ich die Details richtig bin Eingabe, das ist, was mich verblüfft hat. – Abjilla22
Versuchen Sie, django 'django.contrib.auth.forms.AuthenticationForm' zu verwenden (https://docs.djangoproject.com/en/1.10/topics/auth/default/#django.contrib.auth.forms.AuthenticationForm) . Dann könnten Sie eine Fehlerbeschreibung erhalten. – atn