Django用户认证实现报错:ValueError: The given username must be set 求助
Django用户认证实现报错:ValueError: The given username must be set 求助
嘿,我瞅了你的代码,问题其实挺清晰的——你没区分GET请求和POST请求!
当你第一次访问signup页面时,浏览器发的是GET请求,这时候request.POST里压根没数据,username会直接变成None,而Django的User.objects.create_user()方法要求username是必填项,自然就抛出这个错误了。
给你改好views.py的代码,加上请求方法判断,只有用户提交表单(POST请求)时才处理创建用户的逻辑:
from django.shortcuts import render, redirect from django.contrib.auth.models import User def signup(request): # 仅处理POST请求(用户提交表单时) 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: the_user = User.objects.create_user(username=username, email=email, password=password) the_user.save() # 创建成功后跳转到home页面,别再返回注册模板了 return redirect('home') else: # 可以给用户返回个错误提示 return render(request, 'signup.html', {'error': '密码与确认密码不匹配'}) # GET请求时,只渲染注册页面 return render(request, 'signup.html') def home(request): return HttpResponse('Login Successfull')
还有几个小建议:
- 表单的
action写home/有点不规范,建议用Django的反向解析(比如{% url 'home' %}),前提是你在urls.py里给home视图命名了。 - 用Django自带的
UserCreationForm能省很多验证的事,如果你不想自己写表单逻辑,也可以试试这个现成的工具。
备注:内容来源于stack exchange,提问作者deadlock
相关产品推荐
相关产品推荐

