我有一个如下所示的 json。我下面也有程序。需要把程序分成两个类。先在first class获取请求,然后在second class进行操作。基本上如何将我的函数转换为 两个 单独的类,其中 on 类是通用的,其他类执行操作
Postman 接受 json POST 请求如下 http://127.0.0.1:5000/out
{
"filters": [{
"id": 1,
"name": "pool",
"type": "str",
"date": ["2019-12-01", "2019-12-03"]
}]
}
Flask 代码如下
from flask import Flask
app = Flask(__name__)
@app.route('/out/', methods=[ 'POST'])
def values_extract():
json_request = request.get_json()
start_date = ''
end_date = ''
data = json.loads(json.dumps(json_request))
#if valid json then do the below program in separate `**class**`
for i in data['filters']:
if i['type'] == 'pool':
start_date = i['date'][0]
end_date = i['date'][1]
return (start_date, end_date)
if __name__ == "__main__":
app.run()
我的 flask 可以完美运行上述功能
我的类伪代码
class jsonrequest():
def getrequest(self,json_request,data):
self.json_request = request.get_json()
self.data = json.loads(json.dumps(json_request))
start_date = ''
end_date = ''
class valuesextract(jsonrequest):
def filtervalues(self,json_request,data):
for i in data['filters']:
if i['type'] == 'pool':
start_date = i['date'][0]
end_date = i['date'][1]
return (start_date, end_date)
请您参考如下方法:
在进入解决方案之前。您需要问自己为什么需要上课?无需为您的用例保留状态。即使你使用类,到处都是@staticmethod。
一个直接的重构想法是分离数据 ser/deser 逻辑和业务逻辑。针对您的情况
import json
from flask import Flask, request
app = Flask(__name__)
def select_dates(data):
start_date = ''
end_date = ''
for i in data['filters']:
if i['type'] == 'pool':
start_date = i['date'][0]
end_date = i['date'][1]
return [start_date, end_date]
@app.route('/out', methods=['POST'])
def values_extract():
data = request.json
# if valid json then do the below program in separate `**class**`
return json.dumps(select_dates(data))
if __name__ == "__main__":
app.run()
还删除了不必要的 json 加载/转储调用。
HTTP 天生就是无状态的,您会发现很少有需要类的用例。尽可能多地使用函数。
