我正在尝试在 django 中创建一个带有登录和注册表单的网站,注册效果很好,它将帐户保存在数据库中,但是当我尝试登录时,它根本不起作用,这是代码:
View .py
from django.shortcuts import render
from .forms import UserForm
from django.contrib.auth import authenticate, login, logout
from django.urls import reverse
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseRedirect, HttpResponse
# Create your views here.
def index(request):
return render(request, 'app1/index.html')
@login_required
def user_logout(request):
logout(request)
return HttpResponseRedirect(reverse('index'))
def register(request):
registered = False
if request.method == "POST":
user_form = UserForm(data=request.POST)
if user_form.is_valid():
user = user_form.save()
user.set_password(user.password)
user.save()
registered = True
else:
print(user_form.errors)
else:
user_form = UserForm()
return render(request, 'app1/register.html',{'user_form':user_form, 'registered':registered})
def user_login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password = password)
if user:
if user.is_active:
login(request, username)
return HttpResponseRedirect(reverse('index'))
else:
return HttpResponse("Account Not Active")
else:
print("Someone tried to login and failed")
print(f"Username: {username} and password {password}")
return HttpResponse ("Invalid Login details supplied")
else:
return render(request, 'app1/login.html')
模型.py
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class UserProfileInfo(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
表单.py
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class UserForm(UserCreationForm):
email = forms.EmailField(max_length=40, help_text='Required')
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
我希望有人可以帮助我,因为我相信错误在views.py中,但我不确定在哪里。
最佳答案
在login
函数中,我们必须传递user
而不是username
,因此在user_login函数中
if user:
if user.is_active:
login(request, user)
return HttpResponseRedirect(reverse('index'))
else:
return HttpResponse("Account Not Active")
关于python - 为什么 Django 的登录表单显示错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63144532/