python3 通过Flask实现post接收与返回json的接口服务

背景:构建了一个分析模型,需要提供给用户远程调用模型,获取到计算结果。
目标:通过Flask简单搭建一个服务,定义参数,实现远程调用。

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}]

你可能感兴趣的:(python3 通过Flask实现post接收与返回json的接口服务)