如何解决django中/register处的ValueError



我试图创建一个与Django注册,但填写表格后,我一直得到这个ValueError at /register作为一个错误,要求用户名被设置。我是Django的新手,我似乎不明白它的期望是什么。下面是我的注册表单代码,views.py和结果错误分别

注册表单:

{% 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:UsersUserEnvsmyapplibsite-packagesdjangocontribauthmodels.py, line 144, in _create_user
Raised during:  myapp.views.register
Python Executable:  C:UsersUserEnvsmyappScriptspython.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

我认为你做错了。

改变:

action="register"

:

action="{% url 'register' %}" #You need to write name of this register route.

你可以简单地这样做:

action="/register/"

问题出在你的sign .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 "/>
<!-- blank space in this input -->
<p>Email:</p>
<input type="email" name="email "/>
<!-- blank space in this input -->
<p>Password:</p>
<input type="password" name="password"/>
<p>Repeat Password:</p>
<input type="password" name="confirm_password"/><br>
<input type="submit"/>
</form>

你的输入标签"name"价值。所以这些值不会在你的请求中传递给你的视图,你会得到一个None值。

当试图检索具有此值的对象时,将引发异常。

User.objects.filter(username=username).exists()

我建议使用try/except来处理错误,或者在检查模型是否存在之前使用Django的get-object-or-404快捷方式。

相关内容

最新更新