flask前端与后端之间传递的两种数据格式:json与FormData
json格式
双向!
前端 ==>后端:json格式
后端 ==>前端:json格式
html
<!-- html部分 -->
<form enctype='application/json' method="post">
<input type="text" name="username" placeholder="请输入用户名"/></br>
<input type="text" name="password" placeholder="请输入密码"/></br>
<button type="submit">登录</button>
</form>
<!-- 用户列表,用于显示新增的用户 -->
<ol id="container"></ol>
<!-- javascript部分 -->
<script>
var container = document.getElementById('container');
// 辅助函数:将一个新添加的用户(user),放入form的下方容器的尾部显示
var show_added_user = function (user) {
var li = document.createElement("li");
li.innerText = user["id"] + " " + user["username"] + ":" + user["password"];
container.appendChild(li);
};
// 将formData数据转换为json数据,版本一
var convert_FormData_to_json = function (formData) {
var objData = {};
for (var entry of formData.entries()){objData[entry[0]] = entry[1];}
return JSON.stringify(objData);
};
// 将formData数据转换为json数据,版本二(箭头语法)
var convert_FormData_to_json2 = function (formData) {
var objData = {};
formData.forEach((value, key) => objData[key] = value);
return JSON.stringify(objData);
};
var formobj = document.querySelector('form');
//var formobj = document.getElementByTag('form');
formobj.addEventListener('submit', function(event){
event.preventDefault();
var xhr = new XMLHttpRequest();
xhr.open('POST', '/users/');
xhr.setRequestHeader('Content-Type', 'application/json'); // (前端)声明json格式
xhr.send(convert_FormData_to_json(new FormData(formobj)));// (前端)发送json数据
xhr.addEventListener('loadend', function() {
if(xhr.status == 201){ // 201,去看app.py!!
var user = JSON.parse(xhr.responseText); // (前端)处理接收的json数据
show_added_user(user)
//users.map(show_added_user); // 如果返回users list,则可用map!!
}
}, false);
}, false);
</script>
app.py
# app.py
# 查询
@app.route('/users', methods=['GET'])
def show_user(user_id):
users = User.query.all()
return jsonify(users) # (后端)发送json数据
# 查询一个
@app.route('/users/<int:user_id>', methods=['GET'])
def show_user(user_id):
user = User.query.filter_by(id=user_id).first()
return jsonify(user) # (后端)发送json数据
# 添加
@app.route('/users/', methods=['POST'])
def add_user():
username, password = request.json['username'], request.json.get('password', "") # (后端)处理接收的json数据
user = User(username, password) # 自动多了id
db.session.add(user)
db.session.commit()
return jsonify(user), 201 # (后端)发送json数据
FormData格式
单向!
前端 ==>后端:FormData格式
后端 ==>前端:json格式
html
<!-- html部分 -->
<form enctype='application/x-www-form-urlencoded' method="post"> <!-- 编码传送 -->
<!-- 或者:<form enctype='multipart/form-data' method="post"> --> <!-- 不编码传送,特别是当包含文件上传控件时,必须用这个! -->
<input type="text" name="username" placeholder="请输入用户名"/></br>
<input type="text" name="password" placeholder="请输入密码"/></br>
<button type="submit">登录</button>
</form>
<!-- 用户列表 -->
<ol id="container"></ol>
<!-- javascript部分 -->
<script>
var container = document.getElementById('container');
// 辅助函数:将一个新添加的用户(user),放入form的下方容器的尾部显示
var show_added_user = function (user) {
var li = document.createElement("li");
li.innerText = user["id"] + " " + user["username"] + ":" + user["password"];
container.appendChild(li);
};
var formobj = document.querySelector('form');
//var formobj = document.getElementByTag('form');
formobj.addEventListener('submit', function(event){
event.preventDefault();
var xhr = new XMLHttpRequest();
xhr.open('POST', '/users/');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // (前端)声明form格式 注意这里对应前面:application/x-www-form-urlencoded
xhr.send(new FormData(formobj)); // (前端)发送form数据
xhr.addEventListener('loadend', function() {
if(xhr.status == 201){ // 201,去看app.py!!
var user = JSON.parse(xhr.responseText); // (前端)处理接收的json数据
show_added_user(user)
//users.map(show_added_user); // 如果返回users list,则可用map!!
}
}, false);
}, false);
</script>
app.py
# app.py
# 查询
@app.route('/users', methods=['GET'])
def show_user(user_id):
users = User.query.all()
return jsonify(users) # (后端)发送json数据
# 查询一个
@app.route('/users/<int:user_id>', methods=['GET'])
def show_user(user_id):
user = User.query.filter_by(id=user_id).first()
return jsonify(user) # (后端)发送json数据
# 添加
@app.route('/users/', methods=['POST'])
def add_user():
username, password = request.form['username'], request.form.get('password', "") # (后端)处理接收的form数据
user = User(username, password) # 自动多了user_id
db.session.add(user)
db.session.commit()
return jsonify(user), 201 # (后端)发送json数据
flask前端与后端之间传递的两种数据格式:json与FormData的更多相关文章
- android fragment传递参数_fragment之间传值的两种方法
在Activity中加载Fragment的时候.有时候要使用多个Fragment切换.并传值到另外一个Fragment.也就是说两个Fragment之间进行参数的传递.查了很多资料.找到两种方法.一种 ...
- Json传递数据两种方式(json大全)
1.Json传递数据两种方式(json大全)----------------------------字符串 var list1 = ["number","name&quo ...
- [转]Angular2-组件间数据传递的两种方式
本文转自:https://www.cnblogs.com/longhx/p/6960288.html Angular2组件间数据传递有多种方式,其中最常用的有两种,一种是配置元数据(或者标签装饰),一 ...
- Angular2-组件间数据传递的两种方式
Angular2组件间数据传递有多种方式,其中最常用的有两种,一种是配置元数据(或者标签装饰),一种是用单例模块传递:有两个元数据具有传递数据的功能:inputs和outputs. 一.元数据传递 1 ...
- easyUI之datagrid绑定后端返回数据的两种方式
先来看一下某一位大佬留下的easyUI的API对datagrid绑定数据的两种方式的介绍. 虽然精简,但是,很具有“师傅领进门,修行靠个人”的精神,先发自内心的赞一个. 但是,很多人和小编一样,第一次 ...
- 前端与后端之间参数的传递与接收和@RequestBody,@Requestparam,@Param三个注解的使用
参数在前台通过对象的形式传递到后台,在后台,可以用@RequestBody注解通过Map或JSONObject接收(太麻烦,既要从Map中取值,取完值后又要封装到Map),也可以用@RequestPa ...
- python flask学习第2天 URL中两种方式传参
新创建项目 自己写个url映射到自定义的视图函数 在url中传递参数 app.py from flask import Flask app = Flask(__name__) @app.route ...
- 前端向后端获取数据的三种方法:ajax、axios、fetch
1.jQuery中的ajax get方法: $.ajax({ url:"v4/api/film/now-playing?t=1539401039415&page=1&coun ...
- 前端导出功能get和post两种方式
get方式: var url = ’/sjdd/eventQuery/exportSuperviseEventExcel.do?beginDate=' + beginDate + '&endD ...
随机推荐
- Android 开源库和项目 3
Android 开源库和项目 Android 开源库和项目 2 1.Matisse Android 图片选择器 -- 知乎开源 github 地址:https://github.com/zhihu/M ...
- D3、EChart、HighChart绘图demol
1.echarts: <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- Mac日常使用问题
问题一: macbook如何关闭safari左侧书签栏? 方法1: 快捷键:control+command+1键 办法2: 把光标移到safari顶部, 菜单单出来后, 选择view-->sho ...
- win10 安装microsoft.net framework3.5
转载于:https://www.windows10.pro/win10-net-framework-3-5/ 之前手残不小心把microsoft.net framework3.5删了,结果导致Sql ...
- jQuery Validate 介绍
jQuery Validate jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方 ...
- 从PFX文件中获取私钥、公钥证书、公钥
https://blog.csdn.net/ZuoYanYouYan/article/details/77868584 该类具体功能:根据pfx证书得到私钥.根据私钥字节数组获取私钥对象.根据公钥字节 ...
- Hadoop 命令 && Web UI
0. 说明 Hadoop 命令合集 && Web UI 1. HDFS 命令 [1.0 启动所有 && 关闭所有进程] 相当于启动 HDFS 和 YARN # 启动所有 ...
- Java 重写 hashCode() 和 equals() 方法
1. hashCode 1.1 基本概念 hashCode 是 JDK 根据对象的地址算出来的一个 int 数字(对象的哈希码值),代表了该对象再内存中的存储位置. hashCode() 方法是超级类 ...
- SQL一字段内的字符串按照特定字符串转化为多行显示
有如下数据表 需求就是将Col1,Col2按照特定的字符串分割成多行 一.利用XML解析方式 先将该字段值统一替换为逗号分割,再将逗号分割替换转为XML数据类型,再利用xml转为多个行 declare ...
- 基于汇编的 C/C++ 协程 - 切换上下文
在前一篇文章<基于汇编的 C/C++ 协程 - 背景知识>中提到一个用于 C/C++ 的协程所需要实现的两大功能: 协程调度 上下文切换 其中调度,其实在技术实现上与其他的线程.进程调度没 ...