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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 09:28:10