使用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
相关产品推荐
相关产品推荐

