某天,张先生有一个需求怎么把Java项目打包成一个.exe文件,这样对于其它没有安装JRE的电脑来说也能直接使用。其实我当时想把代码重构为python,张先生在前端HTML页面输入相关数据,然后传入后端flask,处理好了才返回给前端,这就达到了前后分离。搭建一个CI/CD自动化部署,持续集成(CI)、持续部署(CD),可以简化工作流程,提高工作效率。
本章内容:

1.json文件的读写
2.json作为前后端数据交互
3.flask与requests,前端form表单交互

1.json文件的读写

    由前文可知,当我们读写json文件时,一定要用loads、dumps,不然会报错
json.dumps :将 Python 对象编码成 JSON 字符串
json.loads :将已编码的 JSON 字符串解码为 Python 对象

文件的储存的数据格式只能是字符串,不能为json字符串(python里实际为dict字典),文件无法存储字典对象

读取json文件:

1
2
3
4
5
import json
with open("./demo_json.json",'r',encoding='utf-8') as f:
a = json.loads(f.read())
# 打印python对象
print(a)

写入json文件:
无论写入txt、json文件无非就是open()文件时,需要添加utf-8,dumps()时。带有中文数据时,需要添加ensure_ascii=False,防止ascii中文编码

1
2
3
import json
with open("demo_json.json", 'w', encoding="utf-8") as f:
f.write(json.dumps(response, ensure_ascii=False))

2.json作为前后端数据交互

    需求:我们用flask作为服务器后端,做一个API,携带目标参数,flask接受POST或GET请求的参数,处理后返回到前端展示
    请求参数:json数据格式

1
2
3
4
5
6
7
8
9
10
request_body = {
"username": "1900201",
"data": {
"age": 18,
"location": "Hangzhou",
"birthday": "1997-01-25",
"ip": ["10.10.11.1", "10.10.11.2", "10.10.11.3"],
"request-type": 2
}
}

数据发送端:
利用requests库,构建一个API,向由flask创建的服务器后端,发送POST数据请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import json
import requests


# 定义一个函数 测试一个服务接口
def get_info():
# 构造服务接口地址
url = 'http://localhost:9527/'

# 构造请求体 请求体将被转换为 JSON 格式
request_body = {
"username": "1900201",
"data": {
"age": 18,
"location": "Hangzhou",
"birthday": "1997-01-25",
"ip": ["10.10.11.1", "10.10.11.2", "10.10.11.3"],
"request-type": 2
}
}
try:
# 向指定服务接口发送 POST 请求
response = requests.post(url=url, json=request_body)
if response.status_code == 200:
# 解析 JSON 格式的响应体 并打印
print('Response info:', response.json())
# 将返回的数据写入文件
with open("demo_json.json", 'w', encoding="utf-8") as f:
f.write(json.dumps(response.json(), ensure_ascii=False))
return None
except Exception as e:
print(e)


if __name__ == '__main__':
get_info()

数据处理端:

拓展(牢记):
flask服务端获取数据方式:

  • data = request.data :获取的是字符串,得到的是原始提交的数据
  • data = request.get_data() :获取的是字符串,得到的是原始提交的数据
  • data = request.get_json() :获取 JSON 格式的请求体
  • username = request.form.get("username") 获取前端form表单名为name=”username”的表单数据
  • password = request.form.get(“password”) 获取前端form表单名为name=”password”的表单数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from flask import Flask, request, jsonify

# 创建一个服务
app = Flask(__name__)
# 声明一个端口
APP_PORT = 9527


# 创建一个接口 指定路由和请求方法 定义处理请求的函数
@app.route(rule='/', methods=['POST', "GET"])
def index():
if request.method == "POST":
# 获取 JSON 格式的请求体 并解析
data = request.get_json()
print('Request info: ', data)

# 解析POST/GET请求传递过来的数据
item = data["data"]

# 生成响应信息
response_info = {
'msg': '收到',
"数据": item
}
print('Response info:', response_info)

# 将响应信息转换为 JSON 格式
response_body = jsonify(response_info)

# 最终对请求进行相应
return response_body
else:
return "<h1>请使用post请求</h1>"

# 这种路由模式:<name>尖括号代表传入参数
@app.route('/user/<name>')
def user(name):
return "<h2> hello python+html, %s</h2>" % name


if __name__ == '__main__':
# 启动服务 指定主机和端口
app.run(host='127.0.0.1', port=APP_PORT, debug=True)

路由模式Ⅱ:尖括号<name>尖括号代表传入参数

运行结果:

1
2
3
4
5
6
7
8
9
Response info: {
'msg':'收到',
"data": {
"age": 18,
"location": "Hangzhou",
"birthday": "1997-01-25",
"ip": ["10.10.11.1", "10.10.11.2", "10.10.11.3"],
"request-type": 2
}}

参考文章


 评论

联系我 | Contact with me

Copyright © 2019-2020 谁知你知我,我知你知深。此恨经年深,比情度日久

博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议