背景:构建了一个分析模型,需要提供给用户远程调用模型,获取到计算结果。
目标:通过Flask简单搭建一个服务,定义参数,实现远程调用。
一、需求说明
本地开发了一个自动填充识别地址规范性的模块,可以检测缺失的地址段,并补充上。
具体需求如下:
接口地址:http://ip:port/query/rydjdz
请求类型:application/json
请求方式:post
接口备注:根据地址名称匹配标准地址地址编码
调试工具:Postman
***二、Flask 接收请求
请求包含两个参数dzmc和dzpd,需要通过处理后返回给用户。
本次测试中模型简化,意思表达到位就行。
from flask import Flask,request
import json
app=Flask(__name__)
@app.route("/query/rydjdz",methods=["POST"])
def rydjdz():
# 默认返回内容
return_dict= {'"code"': '1',"message":'', "data": False}
# 判断传入的json数据是否为空
if request.get_data() is None:
return_dict['return_code'] = '5004'
return_dict['return_info'] = '请求参数为空'
return json.dumps(return_dict, ensure_ascii=False)
# 获取传入的参数
get_Data=request.get_data()
# 传入的参数为bytes类型,需要转化成json
get_Data=json.loads(get_Data)
dzmc = get_Data.get('dzmc')
dzpd= get_Data.get('dzpd')
# 对参数进行操作
zt = zt_model(dzmc)
return_dict['data'] = test_model(dzmc,dzpd,zt)
return (json.dumps(return_dict, ensure_ascii=False))
# 功能函数
def zt_model(dzmc):
if len(dzmc) > 10:
zt = '正确'
else :
zt = '错误'
return (zt)
def test_model(dzmc,dzpd,zt):
result_str = "本地{},状态为{},地址判断结果为{}".format(dzmc,dzpd,zt)
return (result_str)
if __name__ == '__main__':
app.run(debug=True)
直接运行后会报错
* Serving Flask app "__main__" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Restarting with stat
An exception has occurred, use %tb to see the full traceback.
SystemExit: 1
D:\Program\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py:3334: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
查看了解决方式后将代码修改:
from gevent import pywsgi
if __name__ == '__main__':
server = pywsgi.WSGIServer(('0.0.0.0', 5000), app)
server.serve_forever()
三、发送请求测试
import requests
url = "http://ip:port/query/rydjdz"
data = '''{
"dzmc": "hanzhichao",
"dzpd": 18
}'''
res = requests.post(url=url, data=data) # data支持字典或字符串
print(res.text) #查看请求详情
print(res.json) #查看接收结果
或者通过postman进行请求发送
四、其他
多个参数进行修改:
[{"dzmc":"AAAAAA","dzpd":1},{"dzmc":"BBBBBB","dzpd":1}]