如何将HTML表单数据传递至另一HTML页面审核存储
解决方案:通过Django后端中转表单数据,实现先审核再保存
1. 修改表单提交目标与视图逻辑(暂存数据到Session)
首先修改question.html的表单提交地址,指向审核页面的视图:
<!-- question.html --> {% extends 'dependencies.html' %} {% block content %} <div class="jumbotron container row"> <div class="col-md-6"> <h1>Add Question</h1> <div class="card card-body"> <form action="{% url 'approve_questions' %}" method="POST" id="form"> {% csrf_token %} {{form.as_p}} <br> <input type="submit" name="Submit"> </form> </div> </div> </div> {% endblock %}
然后修改views.py中的questions视图,当表单验证通过后,将清洗后的表单数据存入Session,再跳转到审核页面:
# views.py def questions(request): form = addQuestionform() if request.method == 'POST': form = addQuestionform(request.POST) if form.is_valid(): # 将表单清洗后的数据存入session request.session['question_data'] = form.cleaned_data # 跳转到审核页面 return redirect("approve_questions") context = {'form': form} return render(request, 'question.html', context)
2. 修改审核页面视图,读取Session数据并传递给模板
更新views.py中的approve_questions视图,从Session取出暂存的表单数据,传给审核页面模板:
# views.py def approve_questions(request): # 从session获取表单数据 question_data = request.session.get('question_data') if not question_data: # 如果没有数据,返回表单页面 return redirect("questions") context = {'question_data': question_data} return render(request, "approve_questions.html", context)
3. 编写审核页面,展示数据并添加确认保存功能
在approve_questions.html中展示提交的表单数据,并添加一个确认表单,将数据作为隐藏字段提交到保存视图:
<!-- approve_questions.html --> {% extends 'dependencies.html' %} {% block content %} <div class="jumbotron container row"> <div class="col-md-6"> <h1>审核问题</h1> <div class="card card-body"> <h3>提交内容预览:</h3> <!-- 这里根据你的表单字段,逐个展示数据 --> <p><strong>问题标题:</strong>{{ question_data.title }}</p> <p><strong>问题内容:</strong>{{ question_data.content }}</p> <!-- 其他字段依此类推,根据你的addQuestionform字段调整 --> <br> <!-- 确认保存的表单 --> <form action="{% url 'save_question' %}" method="POST"> {% csrf_token %} <!-- 将数据作为隐藏字段传递 --> {% for key, value in question_data.items %} <input type="hidden" name="{{ key }}" value="{{ value }}"> {% endfor %} <input type="submit" value="确认保存" class="btn btn-success"> <a href="{% url 'questions' %}" class="btn btn-danger">返回修改</a> </form> </div> </div> </div> {% endblock %}
4. 添加保存数据的视图
在views.py中新增一个视图,处理审核后的保存请求:
# views.py def save_question(request): if request.method == 'POST': # 用POST数据初始化表单 form = addQuestionform(request.POST) if form.is_valid(): # 正式保存到数据库 form.save() # 发送通知邮件(可选) html = render_to_string("notification_email.html") send_mail('问题已保存', '提交的问题已通过审核并保存', 'noreply@codewithstein.com', ['example@gmail.com'], html_message=html) # 保存后清除session中的数据 if 'question_data' in request.session: del request.session['question_data'] # 跳转到成功页面或列表页 return redirect("login") # 这里可以改成你需要的页面 # 如果不是POST请求或表单无效,返回审核页面 return redirect("approve_questions")
5. 配置URL路由
确保你的urls.py中添加了对应的路由:
# urls.py from django.urls import path from . import views urlpatterns = [ path('add-question/', views.questions, name='questions'), path('approve-question/', views.approve_questions, name='approve_questions'), path('save-question/', views.save_question, name='save_question'), # 其他路由... ]
关键说明
- Session的作用:HTTP是无状态协议,Session用来在表单提交、审核两个请求之间暂存数据,避免直接在URL传递敏感或大量数据。
- 表单字段适配:审核页面的展示字段需要和你的
addQuestionform中的字段对应,比如表单有title、content等字段,就用{{ question_data.title }}来展示。 - 数据安全:使用Django的CSRF保护确保表单提交安全;保存时重新验证表单数据,避免恶意篡改。
内容的提问来源于stack exchange,提问作者user19433213
相关产品推荐
相关产品推荐

