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

使用UserCreationForm创建注册页时POST请求返回空QueryDict求助

Django注册页面POST请求无效、QueryDict为空问题修复

问题分析

从运行日志可以明确看到,点击注册按钮后发起的是GET请求而非预期的POST请求,同时视图处理POST分支时未正确接收表单数据,双重问题导致request.POST始终为空的QueryDict。

修复步骤

1. 修正模板表单的提交配置

模板中action="#%"是核心问题,该配置会强制表单以GET方式提交到当前页面锚点,而非POST到目标视图;另外按钮属性中的逗号属于HTML语法错误,需移除:

修改后的模板代码:

{% extends 'base/base.html' %}

{% block content %}

<form method="POST" class="form-group">
    {% csrf_token %}
    {{form}}
    <button type="submit" name="register" value="register1" class="btn btn-success"> Register </button>
</form>

{% endblock %}

若需明确指定提交路径,可改为action="{% url 'register' %}"(前提是URL配置中给register视图设置了name='register')。

2. 修正视图的表单数据接收逻辑

原视图在POST分支创建UserCreationForm时未传入request.POST,导致表单无法获取提交数据,is_valid()永远返回False;同时重定向参数需符合Django规范:

修改后的views.py代码:

from django.shortcuts import render,redirect
from django.contrib.auth.forms import UserCreationForm
# Create your views here.
def register(request):
    print('\n\n\n\n',request.POST,'\n\n\n')
    if request.method == 'POST':
        # 传入request.POST让表单接收提交的数据
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            # 建议使用URL名称跳转,如redirect('home')(需URL配置中设置name='home')
            return redirect('/home/')
    else:
        form = UserCreationForm()
    context = {'form':form}   

    return render(request,'register/register.html',context)

验证效果

修改完成后点击注册按钮,日志会显示POST /register/ HTTP/1.1" 302(重定向状态),request.POST会包含表单提交的用户名、密码等数据,验证通过后将创建新用户并跳转到首页。

内容的提问来源于stack exchange,提问作者Itachi Uchiha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:52:37