当前位置:   article > 正文

Python 全栈系列96 - flask设置返回头_flask headers

flask headers

说明

有几个地方涉及到headers:

  • 一个是在发送请求时
  • 一个是在视图函数处理时
  • 一个是在视图函数返回时

内容

1 发送时

使用requests

import requests as req
payload = {'some': 'data'}
headers = {'content-type': 'application/json'}
# 按特定的头部发送
ret = requests.post(url, data=json.dumps(payload), headers=headers)
  • 1
  • 2
  • 3
  • 4
  • 5

2 视图函数处理时

视图函数收到请求后,可以通过flask的request对象获取headers并作出判断

from flask import request
if (request.accept_mimetypes.accept_json) and (not request.accept_mimetypes.accept_html):
	...
  • 1
  • 2
  • 3

3 视图函数返回时

通常情况下,使用make_response构造返回体,类似

    # 2. 使用make_response 来构造响应信息
    resp = make_response("index page2")  # 响应体数据
    resp.status = "999 itcast"  # 状态码
    resp.headers["City"] = "ShangHai"  # 通过字典的形式添加响应头
    return resp
  • 1
  • 2
  • 3
  • 4
  • 5

一般我使用jsonify直接返回字符串,这个方法本身已经构造了响应头,直接改一下就可以了,用以下函数替代原来的jsonify就可以了,在设置头部的字典中传入参数就可以了。

# 构造可设置headers的返回,必须在上下文中使用
def jsonify_with_headers(some_data, setting_headers_dict):
    some_data1 = jsonify(some_data)
    for k in setting_headers_dict.keys():
        some_data1.headers[k] = setting_headers_dict[k]
    return some_data1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

通过request调取可以看到返回头部的结果

In [36]: resp.headers
Out[36]: {'Content-Type': 'application/json;charset=utf-8', 'Content-Length': '71', 'Server': 'Werkzeug/0.14.1 Python/3.6.5', 'Date': 'Mon, 17 May 2021 03:04:23 GMT'}
  • 1
  • 2

4 关于传参和解析

4.1 json

通常我习惯直接发送json字符串,这种方式我觉得是最方便的

  • 发送端:将数据序列化为json字符串发送
# data是某个字典
resp = req.post( 'http://host:port/api/', json=data)
print(resp.text)
  • 1
  • 2
  • 3
  • 接收端:将收到的json字符串反序列化
...
input_dict = request.get_json()
...
  • 1
  • 2
  • 3

其他的传参方式整体上逻辑差不多,但是在小的参数设置方便比较烦,要调试

4.2 form 表单

用request发送表单

data = {'data':'''abcdefg\n'''}
resp = req.post( 'http://localhost:5555/api/', data=data)
print(resp.text)
  • 1
  • 2
  • 3

发送的时候不用对字典做特别的处理,直接发送

后端这样接收是可以的

data = request.form.get('data')
  • 1

但是如果这样接收就会乱码

data =  request.get_data('data').decode('utf-8')
---
data=%E5%8C%97%E4%BA%AC%E5%B8%82%E9%AB%98
  • 1
  • 2
  • 3

但是在postman中我用表单去发送这样又是可以解析的。所以应该是参数设置有点问题。

我看了下,如果要和postman一致,应该这么写

tem_str = '''一些文本内容'''
tem_str = tem_str.encode('utf-8')
# headers不加也可以
resp = req.post( 'http://localhost:5555/api/', data=tem_str,headers={'Content-Type':'multipart/form-data'})
print(resp.text)
  • 1
  • 2
  • 3
  • 4
  • 5

暂时先这样,以前这方面还写过一篇类似的文章

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/407869
推荐阅读
相关标签
  

闽ICP备14008679号