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
相关产品推荐
相关产品推荐

