flask-web项目中的数据请求

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hgyan25/article/details/82828747

问题描述

最近(项目的web框架选用flask)遇到一个问题,描述如下:

  1. 从view函数中获得一个全局变量,hosts。类型为列表内嵌dict。
    例如
    hosts{
    host1{ip, mac, id…},
    host2{ip, mac, id…},
    host3{ip, mac, id…}
    }
  2. 前端界面用户通过一个下拉框来选择某一个host(html中的for循环来展示所有的host)
  3. 然后点击一个按钮要将这个host的信息传送到view函数中(JavaScript中获得下拉框选择的值)

解决方案

然后我想到了两种方案,最终解决了我的问题:

  • 构造某个链接,传host_id,其实简单来说就是GET请求。
    url_for函数中要求传入参数的是常量。但是我们通过JavaScript中获取的时候势必是一个变量的形式储存host_id。无法通过url_for构造链接。{{url_for(“xxx”), host_id=常量}}。
  • 把数据放到json中,发送POST请求
    另一种方法就是将获取的数据放到json中,通过ajax发送POST请求。
    • 这个过程中遇到的一个报错是$ is undefine
      出现这个原因是因为jquery没有引入或者引入的顺序不对。$其实是jquery的代称。然后我重新看回自己写的代码,引入jquery文件的部分是在layout.html文件里,在我改的html文件中是需要继承了(extends)layout.html。要用到super{{}}函数,继承layout.html的scripts。

代码

这里附上相关的前端javascript和后端python的代码。

// 此段代码是放置在一个按钮的click函数中
var infos = {
	"mode" : "neutron",
	"ipaddr": "127.0.0.1",
	"hostname": "jane"
};//需要传送的json值
$.ajax({
    type : "POST",
    url : '{{ url_for('cluster.deploy')}}',//对应的URL链接
    data : JSON.stringify(infos),#将数据转换
    contentType : "application/json; charset=UTF-8",//这里比较重要,写明application/json,否则无法识别
    dataType: 'json',
    success : function(results){//成功发送POST请求,并收到反馈之后的处理
            alert(JSON.stringify)
    },
    error : function(xhr, type){
        alert("发送POST请求失败"+ xhr + type );
    }
});
@cluster_bp.route('/deploy', methods=['POST'])
def deploy():
    infos = request.get_json()# 需要引入request变量 from flask import request
    ipaddr = infos['ipaddr']# 通过键值对来获取需要的变量值
    hostname = infos['hostname']
    results['status']="success"
    return jsonify(results)# 返回反馈到html中

区别

POST和GET区别
两者都是HTTP网络请求的方式
从四个方面来进行对比

  1. 效率 GET是[得],从服务器获取数据,效率较快,POST是[给],向服务器发送数据并下载数据,效率较慢
  2. 缓存,GET请求可以被缓存,默认的请求方式也是有缓存的,POST请求默认不缓存
  3. 安全性:GET请求把所有的参数都放到url中,明文显示,且服务器的日志会记录;POST请求只有资源路径,参数封装到二进制的数据体中,服务器不会记录参数,相对安全,但还是可以抓包分析
  4. 数据量,http协议对他们的请求大小没有限制,但实际应用中,GET能承载的数据量小于POST

猜你喜欢

转载自blog.csdn.net/hgyan25/article/details/82828747