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 ...
随机推荐
- 使用 Chef 自动执行 Azure 虚拟机部署
Chef 是一个强大的工具,用于提供自动化和所需的状态配置. 使用我们的最新 cloud-api 版本,Chef 提供了与 Azure 的无缝集成,使得你能够通过单个命令设置和部署配置状态. 在本文中 ...
- Unity[C#] Reflection Use
Reflection Reflection是C#程序员的一个最有力工具 最常用的例子来说明反射的用处是一个插件系统.假设你正在创建一个 接受用户创建 的扩展程序,有没有办法预先知道哪些方法这个扩展 ...
- NHibernate出现could not execute query问题
今天在调试代码时工程总报错,提示could not execute query xxxxxxxxxxxxxxxxxxxxxxxxxxx 找了很久,最终同事发现是数据库连接配置文件的问题. <hi ...
- css多种方法实现已知宽度和未知宽度的元素水平垂直居中
// html <div class="box-wrapper"> <div class="box"> 内部box <p>更 ...
- 二、git版本回退
查看历史版本提交记录 git log git log --pretty=oneline Git用 HEAD表示当前版本 commit id(版本号),也就是最新的提交e4aa53d...43ae6f6 ...
- 1207. [HNOI2004]打鼹鼠【线性DP】
Description 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿Q编写了一个打鼹鼠的游戏:在一个n*n的网格中,在某些时刻鼹鼠会在某一个网格探 ...
- JSSDK图像接口多张图片上传下载并将图片流写入本地
<span style="font-size: 14px;"><!DOCTYPE html> <html lang="en"> ...
- Node.js实战(九)之事件循环
Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高. Node.js 几乎每一个 API 都是支持回调函数的. Node ...
- TIOBE 11月编程语言榜:Go逆袭,Python势头很猛!
导读 离 TIOBE 宣布 2018 年的编程语言只有2个月了.目前来看,有 5 个候选对象,它们都是来自前五名的:Java.C.C++.Python.Visual Basic.NET.每年我们都希望 ...
- 装饰器 python 你也可以叫语法糖
1.最简单的装饰器不带入参 def func(): pass def decorate(func) def wrapper(): return func() return wrapper 使用 @ ...