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=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()
你没有存储在username
这里。我认为最好还是这样做:
user = CustomUser(name=username, email=email, username=username)
user.set_password(password) # otherwise the password will be stored in plain text
user.save()
或者您可以使用create_user
管理器方法来创建用户。
推荐阅读
- code-coverage - 如何将 coverage.svg 限制在一个阶段或从一个阶段删除覆盖率报告?
- flutter - 我可以使用颤振的 TabBar 来过滤卡片列表吗?
- youtube-api - API 密钥如何在 3rd 方应用程序中分发和使用?
- visual-studio-code - VS Code ssh 远程未在新选项卡中打开文件
- amazon-ecs - Amazon ECS,容量提供商无法提供所需容量
- reactjs - 使用箭头键导航/选择 ag-grid 表行
- javascript - 在 iFrame 或其他替代方案中自动播放取消静音 YouTube 视频
- c - 将 mremap(..., MREMAP_FIXED) 与 valgrind 一起使用
- mysql - MySQL JSON 数组列按值计数
- javascript - JavaScript Jest 测试使用 fetch() 并从 JSON 数据中获取“未定义”