出于简化交互的考虑,我们经常见到很多网站把登录页面和注册界面放在同一个页面上,而当我们使用Flask来实现时,却发现问题重重:
1、不管是哪个表单按下了提交按钮,总是提交第一个表单的数据;
2、当一个表单数据验证出错时,两个表单都出现了错误提示;

解决方法1:为你的不同表单里的SubmitField定义不同的名字,然后view.py中调用

....
form1 = Form1()
form2 = Form2()
....
if form1.submit1.data and form1.validate(): # 注意顺序
....
if form2.submit2.data and form2.validate(): # 注意顺序
....

更具体的说明在下面的文章写得非常清楚,认真看
https://zhuanlan.zhihu.com/p/23437362?refer=flask

解决方法2: 在模板中,每个表单提交请求通过action属性设置为不同的URL目标。
把视图函数分成 渲染包含表单的模板(GET请求)、处理表单请求(POST请求)的两部分。当处理多个表单时,把表单的渲染的任务在单独的视图函数中处理(视图A),每个单独的视图函数(视图B)处理表单提交的POST请求。如下:
模板:

<h3>Login Form</h3>
<form meghod="post" action="{{ url_for('handle_signin') }}">{{ signin_form.csrf_token }}{{ form_field(signin_form.username) }}{{ form_field(signin_form.password) }}{{ signin_form.submit }}
</form><h3>Register Form</h3>
<form method="post" action="{{ url_for('handle_register') }}">{{ register_form.csrf_token }}{{ form_field(register_form.username) }}{{ form_field(register_form.email) }}{{ form_field(register_form.password) }}{{ register_form.submit }}
</form>

视图A:

@rouge('/multi-form-multi-view')
def multi_form_multi_view():signin_form = SigninForm()register_form = RegisterForm()return render_template('2form2view.html', signin_form=signin_form, register_form=register_form)

负责单独处理POST提交的视图B:

@app.route('/handle-signin', methods=['POST'])  # 仅传入POST到methods中
def handle_signin():signin_form = SigninForm()register_form = RegisterForm()if signin_form.validate_on_submit():username = signin_form.username.dataflash('%s , yoou just submit the Signin Form.' % username)return redirect(url_for('index'))return render_template('2form2view.html', signin_form = signin_form, register_form = register_form)@app.route('/handle-register', methods=['POST'])
def handle_register():signin_form = SigninForm()register_form = RegisterForm()if register_form.validate_on_submit():username = register_form.username.dataflash('%s, you just submit the Register Form.' % username)return redirect(url_for('index'))return render_template('2form2view.html', signin_form = signin_form, register_form = register_form)

更清晰的介绍,参考看:https://www.cnblogs.com/xiaxiaoxu/p/10549571.html 下面的部分!

Flask一个页面多个form提交的问题及解决方法相关推荐

  1. CSS学习笔记--浮动元素由于浏览器页面缩小而被挤到下面的解决方法

    CSS学习笔记--浮动元素由于浏览器页面缩小而被挤到下面的解决方法 参考文章: (1)CSS学习笔记--浮动元素由于浏览器页面缩小而被挤到下面的解决方法 (2)https://www.cnblogs. ...

  2. jquery submit()不能提交表单的解决方法

    jquery submit()不能提交表单的解决方法 参考文章: (1)jquery submit()不能提交表单的解决方法 (2)https://www.cnblogs.com/war-hzl/p/ ...

  3. git提交大文件的解决方法

    git提交大文件的解决方法 参考文章: (1)git提交大文件的解决方法 (2)https://www.cnblogs.com/perryxiong/p/5606525.html 备忘一下.

  4. Visual Studio无法推送提交到Github的解决方法

    Visual Studio无法推送提交到Github的解决方法 参考文章: (1)Visual Studio无法推送提交到Github的解决方法 (2)https://www.cnblogs.com/ ...

  5. 一个Https网站发送Http的 ajax请求的解决方法

    一个Https网站发送Http的 ajax请求的解决方法 参考文章: (1)一个Https网站发送Http的 ajax请求的解决方法 (2)https://www.cnblogs.com/yuming ...

  6. c2010页面闪现_Vue.js中 v-if 和v-else-if页面加载出现闪现的问题及解决方法

    Vue.js中 v-if 和v-else-if页面加载出现闪现的问题及解决方法 发布于 2020-2-22| 复制链接 vue中v-if 和v-else-if在页面加载的时候,不满足条件的标签会加载然 ...

  7. 进入一个页面, EditText默认就会自动获取焦点的解决办法

    在项目中,一进入一个页面, EditText默认就会自动获取焦点. 那么如何取消这个默认行为呢? 解决之道:在EditText的父级控件中找一个,设置成 android:focusable=" ...

  8. 教师资格考试系统报“访问超时,请点击页面右上角“退出”按钮后重新登录。”解决方法

    [现象] [解决方法] 解决方法1:使用 IE 系列浏览器.如使用 IE11 浏览器,请将 neea.edu.cn 域名添加到兼容性站点列表中. 解决方法2:如果你是程序员,就跟踪一下报错原因,例如笔 ...

  9. SVN版本管理工具使用中常见的代码提交冲突问题的解决方法

    相信刚开始学习使用SVN的小伙伴在项目合作开发的过程中一定经常遇到一些影响到自己编写的代码的苦恼,我这里列举了几种常见的问题以及问题的解决方法: 1.误删除和误操作的问题 问题1:有A和B两个人一块合 ...

最新文章

  1. 人人都能学会的python编程教程15:高级特性2
  2. python自动测试p-Python自动化测试
  3. 翻译:MariaDB DATABASE()
  4. SQLite在C#的使用
  5. 腾讯郑兴:原生安全+协同防御是政企云安全治理的基石
  6. 玩转oracle 11g(47):oracle删除非空表空间
  7. 免费网页模板提供站推荐
  8. 决PHP的eAccelerator缓存模块出现500错误的故障
  9. 蓝牙:深入浅出低功耗蓝牙(BLE)协议栈
  10. Hebb和Delta学习规则
  11. python将整数转换成二进制形式的方法
  12. VSCode搭建STM32开发环境(极简自我搭建懒人直接使用插件)
  13. 小甲鱼Python学习笔记之函数(四)
  14. 作业 20181204-5 Final阶段贡献分配规则及实施
  15. [USACO08DEC]在农场万圣节Trick or Treat on the Farm【Tarja缩点+dfs】
  16. Zabbix之SNMP部署心得
  17. 计算机英语课的总结,英语优质课心得体会
  18. 节流计划-基础知识-2-AIR724UG
  19. wordpress主题The7.6 最新版_2018更新
  20. 安装Bioconductor包和加载DESeq2包的报错问题解决

热门文章

  1. Unity协程的实现原理
  2. android多渠道打包(动态改变地址打包,只需改下版本号)
  3. 遇见未知的自己 张德芬
  4. [2006-04-12]一个下载传奇盗号木马的网站(第2版)
  5. IOT数字世界和元宇宙
  6. Linux正则表达式基本使用
  7. 计算机连接网络是飞行模式怎么办,网络设置只剩飞行模式怎么办_win10笔记本打开只有飞行模式的解决方法...
  8. Winrar发现损坏的压缩文件头
  9. 自定义WPF关闭窗口事件触发的函数
  10. 把PPT文字转换成Word文档的四个技巧