You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django注册页面触发ValueError:用户名必须设置问题求助

Django注册提交后出现ValueError:用户名必须设置

问题描述

使用Django实现注册功能,填写表单提交后触发ValueError at /register错误,提示用户名必须设置。

相关代码

注册模板(register.html)

{% for message in messages %}
<h5>{{message}}</h5>
{% endfor %}
<form method="POST" action="register" name="registerForm">
    {% csrf_token %}
    <p>Username:</p>
    <input type="text" name="username "/>
    <p>Email:</p>
    <input type="email" name="email "/>
    <p>Password:</p>
    <input type="password" name="password"/>
    <p>Repeat Password:</p>
    <input type="password" name="confirm_password"/><br>
    <input type="submit"/>
</form>

视图函数(views.py)

def register(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        email = request.POST.get('email')
        password = request.POST.get('password')
        confirm_password = request.POST.get('confirm_password')
        
        if password==confirm_password:
            if User.objects.filter(username=username).exists():
                messages.info(request, 'Username Taken')
                return redirect('register')
            elif User.objects.filter(email=email).exists():
                messages.info(request, 'Email Taken')
                return redirect('register')
            else:
                user = User.objects.create_user(username=username, email=email, password=password)
                user.save()
                
                return redirect('/')
                
        else:
            messages.info(request, 'Password does not match')
            return redirect('register')
    else:
        return render(request, 'register.html')

错误信息

ValueError at /register
The given username must be set
Request Method: POST
Request URL:    http://127.0.0.1:8000/register
Django Version: 4.1.3
Exception Type: ValueError
Exception Value:    
The given username must be set
Exception Location: C:\Users\User\Envs\myapp\lib\site-packages\django\contrib\auth\models.py, line 144, in _create_user
Raised during:  myapp.views.register
Python Executable:  C:\Users\User\Envs\myapp\Scripts\python.exe
Python Version: 3.10.4
Python Path:    
['C:\\Users\\User\\Desktop\\Python_journey\\djangoTut\\myproject',
 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python310\\python310.zip',
 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python310\\DLLs',
 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python310\\lib',
 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python310',
 'C:\\Users\\User\\Envs\\myapp',
 'C:\\Users\\User\\Envs\\myapp\\lib\\site-packages']
Server time:    Tue, 22 Nov 2022 07:17:35 +0000

问题原因

模板中用户名和邮箱的name属性末尾多了一个空格:

  • 用户名输入框的name="username "(末尾含空格)
  • 邮箱输入框的name="email "(末尾含空格)

视图中获取参数时使用的是request.POST.get('username')和request.POST.get('email'),没有包含空格,导致获取到的username和email均为None。调用User.objects.create_user时,传入的username为None,触发Django用户模型的校验规则,抛出用户名必须设置的错误。

解决方案

修改模板中的输入框name属性,去掉末尾的空格:

<input type="text" name="username"/>
<input type="email" name="email"/>

修改后,视图即可正确获取表单提交的用户名和邮箱值,注册流程可正常执行。


内容的提问来源于stack exchange,提问作者Lady Siayor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:40:42