python - /register 处的 ValueError:必须设置给定的用户名
问题描述
ValueError at /register/ 必须设置给定的用户名 请求方法:POST 请求 URL: http: //127.0.0.1 :8000/register/
Django 版本:1.11.4 异常类型:ValueError 异常值:
必须设置给定的用户名
这是views.py
def register_page(request):
form = RegisterForm(request.POST or None)
context = {
"form": form
}
if form.is_valid():
print(form.cleaned_data)
username = form.cleaned_data.get("username")
email = form.cleaned_data.get("email")
password = form.cleaned_data.get("password")
user = User.objects.create_user(username,email,password)
print(username)
return render(request, "auth/register.html", context)
这是发送 None 作为用户名,我不知道为什么?
user = User.objects.create_user(username,email,password)
如何解决这个问题?它没有通过 POST 方法获取用户名或有其他错误?
解决方案
首先,即使您不在 POST 案例中,您也在做很多事情。我建议您检查您是否在 POST 中。
if request.method == 'POST':
如果您在 POST 中,您可以使用以下命令检索表单:
form = RegisterForm(request.POST)
如果您不在 POST 中,则必须向页面发送一个空表单:
form = RegisterForm()
然后,在检查表单是否有效后,您就可以创建新用户了。
user = User()
请注意,您必须导入类 User :from django.contrib.auth.models import User
现在您可以像以前一样从表单中检索数据,并将其分配给新的空用户:
user.username = form.cleaned_data.get('username')
user.email = form.cleaned_data.get('email')
对于密码,您应该使用以下命令对其进行加密:
user.password = make_password(form.cleaned_data.get('password'))
请注意,您必须导入 make_password 方法:from django.contrib.auth.hashers import make_password
毕竟,您可以将新用户保存到数据库中:
user.save()
请注意,如果多个用户尝试使用相同的用户名等注册,您可能应该将保存到一个try: ... except
块中以捕获由 IntegrityError 引起的潜在异常,这取决于 Django 默认情况下用于其用户模型的完整性规则(我不记得了)
最后,您的视图应如下所示(或类似):
def register_page(request):
if request.method == 'POST':
form = RegisterForm(request.POST)
if form.is_valid():
user = User()
user.username = form.cleaned_data.get('username')
user.email = form.cleaned_data.get('email')
user.password = make_password(form.cleaned_data.get('password'))
user.save()
else:
form = RegisterForm()
return render(request, 'auth/register.html', {'form': form})
考虑到您进行了导入、正确的 RegisterForm 和正确的 auth/register.html,它应该可以工作
推荐阅读
- python - argparse.ArgumentError:参数--skip-checks:冲突的选项字符串:--skip-checks
- asp.net-core - UseDotNet@2 任务是否安装了 Hosting Bundle?
- django - 如何在 Django 查询中使用列表来添加字段
- django - 无法从 django 中的会话字典的键中提取值
- django - Django - 如何动态选择基本模板
- python - 检测和删除 Python pandas 数据框中不需要的单元格
- sql-server - 如何在 SSMS 中使用 Invoke-Sqlcmd?
- javascript - 如何在我的地图中包含来自另一个数组的数据?
- azure - Azure 自动化。PSMetric 转整数
- flutter - 如何获取 Flutter AlertDialog 动作以监视键盘事件(输入键)?