赞
踩
axios 默认的 Content-Type 请求头是:Content-Type: application/json
例如 post 请求中 axios 默认提交的 data 就是 json 数据
这里需要注意的是,jQuery 的默认 Content-Type 请求头是:Content-Type: application/x-www-form-urlencoded
如果项目是从 jQuery 转到 axios 上,需要在 axios 上做 Content-Type 的处理
axios.post({
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
.then(function (response) {
console.log(response);
})
axios 的 get 请求:
axios({
method:'get',
url:'tpls/',
params: {
ID: 12345
}
})
.then(function (response) {
console.log(error);
});
axsio 的别名写法:
axios.get('/tpls?ID=12345')
.then(function (response) {
// handle success
console.log(response);
})
.catch(function (error) {
// handle error
console.log(error);
})
.then(function () {
// always executed
});
// or
axios.get('/tpls', {
params: {
ID: 12345
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
})
.then(function () {
// always executed
});
如果请求的是图片流,如下:
axios({
method:'get',
url:'tpls/img',
responseType:'stream'
})
.then(function (response) {
response.data.pipe(fs.createWriteStream('detail.jpg'))
});
request.args.get('key')
获取get请求的所有参数返回值是ImmutableMultiDict类型
requestValues = request.args
requestValues.to_dict()
json 的 post 请求
axios({
method: 'post',
url: 'tpls/submit',
data: {
name: 'alma',
edu: {shcool: 'MIT', age: '20'}
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
axios 别名的写法:
axios.post('tpls/submit', {
name: 'alma',
edu: {shcool: 'MIT', age: '20'}
})
不做 response 的处理也是可以的
flask 这边这样接受请求,以及 return 一个 response:
@app.route('tpls/submit', methods=['POST'])
def submit():
anchor = request.json
print(anchor.get('name'))
return 'response'
也就是说,flask 拿到的 json 数据直接变成了 dict 类型,可以方便的使用
Ajax 请求不来源于 form 提交,flask 的 request.form 是拿不到数据的,只能通过以下几种方式拿到数据:
request.get_data()
以 get_data() 拿到的数据,将会变成 bytes 对象,如:
b'{'name': 'alma'}'
此时需引入 json 模块,再次重新将其以 json 形式转为 dict(如果 data 是 json):
json.loads(request.get_data())
request.get_json()
request.data
request.json
这几种方式就好得多,拿过来就是 dict,直接用
html 创建 input file, 比如:
<input name="file" type="file" accept="image/png,image/gif,image/jpeg" id="imgFile"/>
封装一个 FormDate 对象,然后请求头使用Content-Type: 'multipart/form-data’:
let file = e.target.files[0];
let param = new FormData();
param.append('pic_file', file, file.name);
axios({
method: 'post',
url: 'tpls/submit',
headers: {'Content-Type': 'multipart/form-data'},
data: param
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
axios 别名的写法:
let file = e.target.files[0];
let param = new FormData();
param.append('pic_file', file, file.name);
let config = {
headers: {'Content-Type': 'multipart/form-data'}
};
axios.post('tpls/submit', param, config)
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
@app.route('tpls/submit', methods=['POST'])
def submit():
anchor = request.files
print(request.files)
return 'response'
anchor = request.files['pic_file']
def __init__(
self,
stream=None,
filename=None,
name=None,
content_type=None,
content_length=None,
headers=None,
)
basedir = os.path.abspath(os.path.dirname(__file__))
path = basedir+"/static/photo/"
file_path = path+img.filename
...
anchor = request.files['pic_file’]
anchor.save(file_path)
FileStorage.read()
# or
FileStorage.stream.read()
比如可以读出字节流来转成 base64:
@app.route('tpls/submit', methods=['POST'])
def submit():
anchor = request.files['pic_file']
base64_data = base64.b64encode(anchor.read())
s = base64_data.decode()
print('data:image/jpeg;base64,%s' % s)
return 'response'
参考:
https://www.cnblogs.com/wupeiqi/articles/7552008.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。