本文分享自华为云社区《【首发】flask 实现ajax 数据入库,并掌握文件上传》,作者:梦想橡皮擦。

flask 实现ajax 数据入库

在正式编写前需要了解一下如何在 python 函数中去判断,一个请求是 get 还是 post。

python 文件代码如此所示:

# route()方法用于设定路由;
@app.route('/hello.html', methods=['GET', 'POST'])
def hello_world():if request.method == 'GET':# args = request.argsreturn render_template('hello.html')if request.method == "POST":print("POST请求")

上述代码通过 requests.method 属性判断当前请求类型,然后实现相应的逻辑。
注意上述内容中的 @app.route('/hello.html', methods=['GET', 'POST']) ,绑定的方法由参数 methods 决定。

HTML 页面代码如下所示:

<!DOCTYPE html>
<html lang="zh-cn"><head><meta charset="UTF-8"><title>这是第一个HTML页面</title><script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</head><body>{{name}}<input type="button" value="点击发送请求" id="btn" /><script>$(function() {$('#btn').on('click', function() {alert($(this).val());});})</script>
</body></html>

在 HTML 页面中提前导入 jquery 的 CDN 配置,便于后续实现模拟请求操作。

再次完善一些 POST 请求的相关参数判断,通过 requests.form 获取表单参数。

# route()方法用于设定路由;
@app.route('/hello.html', methods=['GET', 'POST'])
def hello_world():if request.method == 'GET':args = request.argsname = args.get('name')return render_template('hello.html',name=name)if request.method == "POST":print("POST请求")arges = request.formprint(arges)return "PPP"

同步修改一下前端请求部分,这里改造主要需要的是前端知识。

<body>{{name}}<input type="button" value="点击发送请求" id="btn" /><script>$(function() {$('#btn').on('click', function() {//alert($(this).val());$.post('./hello.html', function(result) {console.log(result);})});})</script>
</body>

测试的时候同步开启浏览器的开发者工具,并且切换到网络请求视图,查看请求与返回数据。

数据传递到后台之后,通过将将 flask 与 mysql 实现对接,完成一个入库操作,然后将数据存储到 MySQL 中。

实现文件上传

了解了POST请求之后,就可以通过该模式实现文件上传操作了。
优先修改 HTML 页面,实现一个文件选择按钮。

<input type="file" id="file" />
<script type="text/javascript">$(function() {$('#btn').on('click', function() {//alert($(this).val());$.post('./hello.html', function(result) {console.log(result);})});var get_file = document.getElementById("file");get_file.onchange = function(e) {file = e.currentTarget.files[0]; //所有文件,返回一个数组var form_data = new FormData();form_data.append("file", file);console.log(form_data);form_data.append("file_name", e.currentTarget.files[0].name);$.ajax({url: '/upload',type: 'post',data: form_data,contentType: false,processData: false,success: function(res) {console.log(res.data);}});}})
</script>

服务端处理文件的代码如下所示

@app.route('/upload', methods=['POST'], strict_slashes=False)
def upload():if request.method == "POST":print("POST请求")file = request.files.get('file')name = request.form.get('file_name')print(name)file.save("./"+name)# print(name)return "PPP"

这里需要注意的是如果 Python 端存在BUG,前端的AJAX请求会出现 400或者500错误。
文件名通过前端传递 file_name 参数获取。
本案例可以扩展上传成功之后,返回JSON数据到前端进行后续处理。

项目在实测的过程中发现一个问题,在读取前台传递的文件流时,需要使用 request.files.get() 方法实现,而不能用 request.form['参数名'] 。

点击关注,第一时间了解华为云新鲜技术~​

教你如何使用flask实现ajax数据入库相关推荐

  1. flask POST请求,数据入库,文件上传,一文看懂,3天掌握Flask开发项目系列博客之三

    flask 实现ajax 数据入库 在正式编写前需要了解一下如何在 python 函数中去判断,一个请求是 get 还是 post. python 文件代码如此所示: # route()方法用于设定路 ...

  2. jquery ajax 与 flask 传输 json 并且 提取ajax数据作为全局变量

    jquery ajax 与 flask 传输 json 并且 提取ajax数据作为全局变量 jquery <!DOCTYPE html> <html lang="en&qu ...

  3. axios ajax和flask传输json数据

    axios ajax和flask传输json数据 视频 https://www.bilibili.com/video/BV1WC4y1b78y?p=23 https://www.bilibili.co ...

  4. 教你轻松截获 Selenium 中的 Ajax 数据

    之前我们介绍了 ajax-hook 来实现爬虫的过程中截获 Ajax 请求,可以看这篇文章如何用 Hook 实时处理和保存 Ajax 数据,在这里再另外介绍一个工具 BrowserMob Proxy, ...

  5. 如何用 Hook 实时处理和保存 Ajax 数据

    做爬虫的时候我们经常会遇到这么一个问题: 网站的数据是通过 Ajax 加载的,但是 Ajax 的接口又是加密的,不费点功夫破解不出来.这时候如果我们想绕过破解抓取数据的话,比如就得用 Selenium ...

  6. Flask使用ajax进行前后端交互

    ajax前后端交互的使用已经非常普及了, 这种数据交互方式比表单提交数据带给用户的使用体验更好一些.同时,利用ajax交互时数据传输一般使用json,我们可以很方便的管理我们所需要的数据.只需要定义好 ...

  7. Hadoop+hive+flask+echarts大数据可视化之系统数据收集

    Hadoop+hive+flask+echarts大数据可视化项目(一) --------------系统数据收集---------------- 谈到大数据的项目,一般以数据可视化为主体,收集大数据 ...

  8. flask加ajax实现web微信

    引言 web微信 创建二维码 模拟登录 获取验证信息 展示用户信息 获取全部用户信息 总结 引言 本篇内容为通过flask加ajax完成对web微信的模拟登录,直到获取到完整信息, web微信 web ...

  9. Hadoop+hive+flask+echarts大数据可视化项目之flask结合echarts前后端结合显示hive分析结果

    Hadoop+hive+flask+echarts大数据可视化项目(五) ------flask与echarts前后端结合显示hive分析结果------- 关注过Hadoop+hive+flask+ ...

最新文章

  1. 关于web.xml的格式
  2. mysql触发器错误信息_MySQL 触发器错误_MySQL
  3. Jquery中使用SweetAlert使弹窗更漂亮
  4. mysql key buffer_mysql 开发进阶篇系列 16 MySQL Server(myisam key_buffer)
  5. Java数据库篇8——索引、视图、存储过程、触发器
  6. Files Created on Boot
  7. vs2017创建外部css,webpack - 从生成的Microsoft SPA模板VS2017 webpack中删除特定供应商css - 堆栈内存溢出...
  8. 使用实时摄像头预览的iOS对象检测(六)
  9. hadoop hive集群_Hive的优化和压缩
  10. Sql Server 中利用游标对table 的数据进行分组统计式输出…
  11. C#学习笔记-ContextMenuStrip
  12. 后副车架焊接机器人_焊接机器人的工装设计和工装的使用方法
  13. SharePoint 实现ajax异步加载数据的几种方式
  14. c++内存中字节对齐问题详解 【转载】
  15. gmap mysql cachet_百度谷歌离线地图解决方案(离线地图下载)
  16. css设置行高居中,CSS line-height行高上下居中垂直居中样式属性
  17. week7 TT的旅行日记
  18. Spring Data Neo4j解除两个节点之间的关系
  19. 尼康d3200与智能设备 (android) 连接,,尼康D3200有WIFI功能吗
  20. 机器学习常用专业术语(英汉)

热门文章

  1. Emacspeak,Linux的声音界面
  2. 如何使用recordMyDesktop录制截屏视频
  3. (1)前端工程化—全副武装:通过工程化提升「战斗力」
  4. 作死 | 程序猿的花式作死,因为你的幽默,你的前途有了!
  5. 面试 | 程序猿面试,Elasticsearch被坑被虐的体无完肤...
  6. Bootstrap3 输入提示插件typeahead
  7. CSS 制作下拉导航
  8. es6 方法的修饰器
  9. 深度学习笔记(25) 池化层
  10. android逆向分析有什么用,如何开始对Android应用的逆向分析?