首页 > 解决方案 > 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),只存储了他们的电子邮件,而不是他们的用户名。我相信这就是我在使用这个新用户登录时也遇到问题的原因。

在此处输入图像描述

但是我不确定为什么没有为我创建的新用户存储用户名。任何见解都值得赞赏。

标签: pythondjango

解决方案


大概问题就出在这里:

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管理器方法来创建用户。


推荐阅读