当前位置: 首页 > news >正文

python-flask-上传文件时表单提交报错:Method Not Allowed

环境:
本地环境:win10 / centos6 , python3

flask入门:
python-flask结合bootstrap实现网页小工具实例-半小时速通版_bootstrap flask-CSDN博客
https://blog.csdn.net/pxy7896/article/details/137854455

python-flask-上传多个文件并存储_flask 上传多个文件-CSDN博客
https://blog.csdn.net/pxy7896/article/details/141026464


问题描述

很简单的一个工具:<form>里上传一个文件,点击提交按钮,前端向后台传送这个文件,进行异步计算,然后返回结果,利用返回结果修改某些<div>,让用户可以下载结果。完整流程在 python-flask结合bootstrap实现网页小工具实例-半小时速通版 已经写明,但现在遇到 405 错误:

The method is not allowed for the requested URL.

可能原因

当出现"Method Not Allowed"错误时,通常意味着在使用Flask时向特定URL发送了不被允许的HTTP请求方法。

  1. 检查路由是否定义了POST/GET
    @app.route('/example', methods=['GET', 'POST'])
    
  2. 检查是否使用了正确的HTTP方法。例如,如果路由只允许GET请求,而前端发送了一个POST请求,就会导致"Method Not Allowed"错误
  3. 检查Flask应用的配置:有时候"Method Not Allowed"错误可能是由于应用配置或中间件问题引起的

解决

最后发现是我表单写错了。

<form action="example" ...>...<div class="row"><button class="btn btn-primary" id="input-design-submit">提交</button></div>
</form>

这里提交按钮就不应该用button,应该用input

因为这个按钮的点击事件要带着上传的文件发post请求,而这个异步请求,跟form的action,有个先后问题,或者说可能会冲突。

改为下面这样就ok了。

<input type="button" value="提交"/>

完整解法:

前端:

<form action="run_command_res"  enctype="multipart/form-data" name="main_form" id="main_form" ><!-- 略去一些内容 --><div class="row"><input name="attach" type="file"  id="customFile" lang="ch"></div><div class="row"><input type="button" value="提交"  class="btn btn-primary" id="input-design-submit" /></div>
</form><script>
$("#input-design-submit").click(function () {// 构造数据var formData = new FormData();var attachFile = document.getElementById("customFile").files[0];if (attachFile == null) {var blob = new Blob([], {type: "text/plain;charset=utf-8"});formData.append("attach", blob);} else {formData.append("attach", attachFile);}$(this).disabled = true; // 暂时禁用	$.ajax({type: 'POST',url: "/run_command_res",data: formData,processData: false, // jQuery不要处理发送的数据contentType: false, // jQuery不要设置Content-Type请求头success: function (resp){var obj = jQuery.parseJSON(resp);var code = obj.code;if (code == 1) {// 成功} else {// 失败}}});$(this).disabled = false; // 恢复
});
</script>

后端:

@app.route('/run_command_res', methods=['POST'])
def run_command_res():'''xxx design'''if request.method == 'POST':files = request.files.getlist('attach')res = {}code = 1  # if fail, 0# save filef = files[0] # only first filef.save('path/to/file')// do something# resultres["code"] = codereturn json.dumps(res)

表单提交简化版

上面的情况是,前端向后端发送请求,后端处理后向前端返回数据,然后更新前端页面。如果不需要后端回传数据,可以只由form提交。此时的实现方案是:

前端:(不用写js了)

<form method="POST" enctype="multipart/form-data" action="run_command_res"  name="main_form" id="main_form" ><!-- 略去一些内容 --><div class="row"><input name="attach" type="file"  id="customFile" lang="ch"></div><div class="row"><button class="btn btn-primary">提交</button></div>
</form>

后端:(获取文件的方式变了)

@app.route('/run_command_res', methods=['POST'])
def run_command_res():'''xxx design'''if request.method == 'POST':# save file# 通过name获取文件f = request.files['attach']f.save('path/to/file')# do somethingreturn render_template('xxx.html')

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 编程学习方法——感悟分享
  • Android Camera系列(三):GLSurfaceView+Camera
  • Swift项目#if DEBUG不生效
  • 聚焦数据,探索分布式数据库与湖仓一体的前沿应用
  • Java导出图片到excel
  • sql-labs51-55通关攻略
  • 在react 中还有另外一种three.js 渲染方式
  • 51单片机-DS1302,操作简述
  • MySQL面试题--最全面-索引
  • Sqoop部署和基本操作
  • VBA学习(71):Excel VBA 访问带密码保护的Access数据库/用户窗体设置/EXCEL用户+密码登录界面(Access版)
  • vite项目配置本地开发使用https访问
  • vue3页面空白-普通函数和箭头函数提升的不同
  • 探索Python世界的趣味之旅:自制贪吃蛇游戏
  • 【Python123题库】#大学排行榜分析 #数据统计 #罗马数字转换
  • ➹使用webpack配置多页面应用(MPA)
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • JAVA 学习IO流
  • JavaScript中的对象个人分享
  • laravel with 查询列表限制条数
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • pdf文件如何在线转换为jpg图片
  • PHP面试之三:MySQL数据库
  • vue数据传递--我有特殊的实现技巧
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 爬虫模拟登陆 SegmentFault
  • 前嗅ForeSpider采集配置界面介绍
  • 如何用vue打造一个移动端音乐播放器
  • 数组大概知多少
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 线性表及其算法(java实现)
  • 学习笔记:对象,原型和继承(1)
  • 用简单代码看卷积组块发展
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 阿里云ACE认证之理解CDN技术
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #define用法
  • (1)(1.13) SiK无线电高级配置(五)
  • (4)(4.6) Triducer
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (强烈推荐)移动端音视频从零到上手(下)
  • (全注解开发)学习Spring-MVC的第三天
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (四)stm32之通信协议
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)Sublime Text3配置Lua运行环境
  • (转)关于如何学好游戏3D引擎编程的一些经验