Python Django:当登录时创建新用户时,用户名为空
我使用HTML/CSS而不是Django的form.as\p在Django中创建了用于登录和注册的自定义表单。我在views.py中有以下代码:Python Django:当登录时创建新用户时,用户名为空,python,django,Python,Django,我使用HTML/CSS而不是Django的form.as\p在Django中创建了用于登录和注册的自定义表单。我在views.py中有以下代码: def login_user(request): logout(request) if request.POST: username = request.POST['username'] password = request.POST['password'] user = authenticate(username=userna
def login_user(request):
logout(request)
if request.POST:
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return redirect('/mainpage/')
else:
login_message = "Your username or password is incorrect."
return render(request, 'index.html', {'login_message': login_message})
return render(request, 'index.html')
def sign_up(request):
if request.POST:
username = request.POST['username']
email = request.POST['email']
password = request.POST['password']
password_confirm = request.POST['password-confirm']
if(valid_form(username, email, password, password_confirm)):
#create the new user
user = CustomUser(name=username, email=email, password=password)
user.save()
user = authenticate(username=username, password=password)
login(request, user)
return redirect('/mainpage/')
else:
message = "There was a problem."
return render(request, 'index.html', {'message': message})
return render(request, 'index.html')
我在models.py中为CustomUser提供了以下模型:
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=200, null=True)
email = models.EmailField(max_length=70, null=True)
password = models.CharField(max_length=50, null=True)
我的代码用于注册,输入用户名、电子邮件和密码后,我可以创建一个新用户。当我在Django管理站点的用户列表中检查用户时,对于我创建的ruby新用户,只存储他们的电子邮件,而不存储他们的用户名。我相信这也是我在与这个新用户登录时遇到问题的原因
但是,我不确定为什么没有为我创建的新用户存储用户名。任何见解都值得赞赏。问题可能在于:
user = CustomUser(name=username, email=email, password=password) # <-- Here
user.save()
或者您可以使用manager方法创建用户。问题可能在于:
user = CustomUser(name=username, email=email, password=password) # <-- Here
user.save()
或者您可以使用manager方法创建用户。由于您的“CustomUser”类扩展了AbstractUser,它作为抽象模型提供了默认用户的完整实现,因此您应该使用相同的签名用户名,而不是如下所示的名称:
#create the new user
user = CustomUser(username=username, email=email, password=password)
由于“CustomUser”类扩展了AbstractUser,它作为抽象模型提供了默认用户的完整实现,因此您应该使用相同的签名用户名,而不是以下名称:
#create the new user
user = CustomUser(username=username, email=email, password=password)
根据django文档,AbstractUser有用户名字段,该字段是必需的,用于身份验证:
username = models.CharField(_('username'), max_length=30, unique=True,
help_text=_('Required. 30 characters or fewer. Letters, digits and '
'@/./+/-/_ only.'),
validators=[
validators.RegexValidator(r'^[\w.@+-]+$',
_('Enter a valid username. '
'This value may contain only letters, numbers '
'and @/./+/-/_ characters.'), 'invalid'),
],
error_messages={
'unique': _("A user with that username already exists."),
})
在您的例子中,您有一个name字段,它是模型中的一个附加字段,但在视图中,您将username传递给name,而所需的username字段没有填充
尝试删除模型中的“名称”字段。将用户名传递给用户名根据django文档,AbstractUser有用户名字段,该字段是必需的,用于身份验证:
username = models.CharField(_('username'), max_length=30, unique=True,
help_text=_('Required. 30 characters or fewer. Letters, digits and '
'@/./+/-/_ only.'),
validators=[
validators.RegexValidator(r'^[\w.@+-]+$',
_('Enter a valid username. '
'This value may contain only letters, numbers '
'and @/./+/-/_ characters.'), 'invalid'),
],
error_messages={
'unique': _("A user with that username already exists."),
})
在您的例子中,您有一个name字段,它是模型中的一个附加字段,但在视图中,您将username传递给name,而所需的username字段没有填充
尝试删除模型中的“名称”字段。将用户名传递给用户名