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

如何在Django中将input.html内容传至approve.html验证并存储至数据库?

问题描述

我是一名Django新手,已经花了7天时间尝试解决这个问题,希望能得到帮助:如何将input.html中的全部表单内容传递到approve.html,让approve.html完成数据验证后将内容存储到数据库?

附上相关表单代码:

input.html的表单

<form action="/my-handling-form-page" method="post">
  <ul>
    <li>
      <label for="name">Name:</label>
      <input type="text" id="name" name="user_name" />
    </li>
    <li>
      <label for="mail">Email:</label>
      <input type="email" id="mail" name="user_email" />
    </li>
    <li>
      <label for="msg">Message:</label>
      <textarea id="msg" name="user_message"></textarea>
    </li>
    <li>
      <button class="menü_button"><b>send</b></button>
    </li>
  </ul>
</form>

approve.html的表单

<form action="/my-handling-form-page" method="post">
  <ul>
    <li>
      <label for="name">Name:</label>
      <input type="text" id="name" name="user_name" />
    </li>
    <li>
      <label for="mail">Email:</label>
      <input type="email" id="mail" name="user_email" />
    </li>
    <li>
      <label for="msg">Message:</label>
      <textarea id="msg" name="user_message"></textarea>
    </li>
    <li>
      <button class="menü_button"><b>save</b></button>
    </li>
    <li>
      <button class="menü_button"><b>remote</b></button>
    </li>
  </ul>
</form>
解决方案

Django中无法直接在模板间传递数据,必须通过视图层中转,以下是完整实现步骤:

1. 创建数据模型

在你的app的models.py里定义存储表单数据的模型:

from django.db import models

class UserMessage(models.Model):
    user_name = models.CharField(max_length=100)
    user_email = models.EmailField()
    user_message = models.TextField()

    def __str__(self):
        return self.user_name

执行迁移命令创建数据库表:

python manage.py makemigrations
python manage.py migrate

2. 编写视图函数

在app的views.py里添加两个视图:一个接收input页面的表单数据并传递到approve页面;另一个处理approve页面的保存请求,完成验证与入库。

from django.shortcuts import render, redirect
from django import forms
from .models import UserMessage

# 复用验证逻辑的表单类
class MessageForm(forms.ModelForm):
    class Meta:
        model = UserMessage
        fields = ['user_name', 'user_email', 'user_message']

# 接收input页面提交,暂存数据后跳转至approve页面
def input_submit(request):
    if request.method == 'POST':
        request.session['form_data'] = request.POST.dict()
        return redirect('approve_page')
    return render(request, 'input.html')

# 展示approve页面并处理保存请求
def approve_page(request):
    form_data = request.session.get('form_data', {})
    if request.method == 'POST':
        form = MessageForm(request.POST)
        if form.is_valid():
            form.save()
            del request.session['form_data']
            return redirect('success_page')
        return render(request, 'approve.html', {'form': form})
    else:
        form = MessageForm(initial=form_data)
        return render(request, 'approve.html', {'form': form})

# 可选:保存成功后的跳转页面视图
def success_page(request):
    return render(request, 'success.html')

3. 配置URL路由

在项目或app的urls.py中添加路由规则:

from django.urls import path
from . import views

urlpatterns = [
    path('input/', views.input_submit, name='input_page'),
    path('approve/', views.approve_page, name='approve_page'),
    path('success/', views.success_page, name='success_page'),
]

4. 修改模板文件

更新input.html的表单

修改action指向对应路由,并添加Django必填的CSRF令牌:

<form action="{% url 'input_page' %}" method="post">
  {% csrf_token %}
  <!-- 原表单内容保持不变 -->
</form>

更新approve.html的表单

用Django表单渲染,自动预填数据并展示验证错误:

<form action="{% url 'approve_page' %}" method="post">
  {% csrf_token %}
  <ul>
    <li>
      <label for="id_user_name">Name:</label>
      {{ form.user_name }}
      {% if form.user_name.errors %}
        <span style="color:red;">{{ form.user_name.errors.0 }}</span>
      {% endif %}
    </li>
    <li>
      <label for="id_user_email">Email:</label>
      {{ form.user_email }}
      {% if form.user_email.errors %}
        <span style="color:red;">{{ form.user_email.errors.0 }}</span>
      {% endif %}
    </li>
    <li>
      <label for="id_user_message">Message:</label>
      {{ form.user_message }}
      {% if form.user_message.errors %}
        <span style="color:red;">{{ form.user_message.errors.0 }}</span>
      {% endif %}
    </li>
    <li>
      <button class="menü_button"><b>save</b></button>
    </li>
    <li>
      <button class="menü_button" type="button" onclick="window.location.href='{% url 'input_page' %}'"><b>remote</b></button>
    </li>
  </ul>
</form>

关键注意事项

  • 用session暂存input页面的表单数据,确保跳转后数据不丢失;
  • 使用ModelForm自动完成数据验证与入库,避免重复编写逻辑;
  • 所有POST表单必须添加{% csrf_token %},这是Django的安全防护机制,防止CSRF攻击。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:05:26