python3 通過(guò)Flask實(shí)現(xiàn)post接收與返回json的接口服務(wù)

背景:構(gòu)建了一個(gè)分析模型,需要提供給用戶遠(yuǎn)程調(diào)用模型,獲取到計(jì)算結(jié)果。
目標(biāo):通過(guò)Flask簡(jiǎn)單搭建一個(gè)服務(wù),定義參數(shù),實(shí)現(xiàn)遠(yuǎn)程調(diào)用。

Flask


一、需求說(shuō)明

本地開(kāi)發(fā)了一個(gè)自動(dòng)填充識(shí)別地址規(guī)范性的模塊,可以檢測(cè)缺失的地址段,并補(bǔ)充上。
具體需求如下:

接口地址:http://ip:port/query/rydjdz
請(qǐng)求類型:application/json
請(qǐng)求方式:post
接口備注:根據(jù)地址名稱匹配標(biāo)準(zhǔn)地址地址編碼
調(diào)試工具:Postman

***二、Flask 接收請(qǐng)求
請(qǐng)求包含兩個(gè)參數(shù)dzmc和dzpd,需要通過(guò)處理后返回給用戶。
本次測(cè)試中模型簡(jiǎn)化,意思表達(dá)到位就行。

from flask import Flask,request
import json

app=Flask(__name__)

@app.route("/query/rydjdz",methods=["POST"])
def rydjdz():
    # 默認(rèn)返回內(nèi)容
    return_dict= {'"code"': '1',"message":'',  "data": False}
    # 判斷傳入的json數(shù)據(jù)是否為空
    if request.get_data() is None:
        return_dict['return_code'] = '5004'
        return_dict['return_info'] = '請(qǐng)求參數(shù)為空'
        return json.dumps(return_dict, ensure_ascii=False)
    # 獲取傳入的參數(shù)
    get_Data=request.get_data()
    # 傳入的參數(shù)為bytes類型,需要轉(zhuǎn)化成json
    get_Data=json.loads(get_Data)    
    dzmc = get_Data.get('dzmc')
    dzpd= get_Data.get('dzpd')
    # 對(duì)參數(shù)進(jìn)行操作
    zt = zt_model(dzmc)
    return_dict['data'] = test_model(dzmc,dzpd,zt)
    
    return (json.dumps(return_dict, ensure_ascii=False))

    # 功能函數(shù)
def zt_model(dzmc):
    if len(dzmc) > 10:
        zt = '正確'
    else :
        zt = '錯(cuò)誤'
    return (zt)
    
def test_model(dzmc,dzpd,zt):
    result_str = "本地{},狀態(tài)為{},地址判斷結(jié)果為{}".format(dzmc,dzpd,zt)
    return (result_str)

if __name__ == '__main__':
    app.run(debug=True)

直接運(yùn)行后會(huì)報(bào)錯(cuò)

 * 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()

三、發(fā)送請(qǐng)求測(cè)試

import requests 
 
url = "http://ip:port/query/rydjdz"
data = '''{
        "dzmc": "hanzhichao",
        "dzpd": 18
        }''' 
res = requests.post(url=url, data=data) #  data支持字典或字符串
print(res.text) #查看請(qǐng)求詳情
print(res.json) #查看接收結(jié)果

或者通過(guò)postman進(jìn)行請(qǐng)求發(fā)送


請(qǐng)求結(jié)果

四、其他

多個(gè)參數(shù)進(jìn)行修改:

[{"dzmc":"AAAAAA","dzpd":1},{"dzmc":"BBBBBB","dzpd":1}]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Table of Contents WSGIwsgi服務(wù)器作用wsgirefhttp協(xié)議無(wú)狀態(tài),短連接,長(zhǎng)連接co...
    四月天_da7e閱讀 529評(píng)論 0 0
  • 內(nèi)容主要包含網(wǎng)絡(luò)編程、數(shù)據(jù)庫(kù)和框架 1. 簡(jiǎn)述 OSI 七層協(xié)議 OSI是網(wǎng)絡(luò)傳輸協(xié)議,人為的把網(wǎng)絡(luò)傳輸?shù)牟煌A段...
    Thomas_梁閱讀 532評(píng)論 0 1
  • tags: python flask 計(jì)算機(jī)體系 艾蘭?圖靈(Turing)? &馮?諾依曼(Neumann)艾...
    33jubi閱讀 1,848評(píng)論 1 9
  • 【百度云搜索,搜各種資料:http://www.lqkweb.com】 【搜網(wǎng)盤(pán),搜各種資料:http://www...
    攻城獅筆記閱讀 1,450評(píng)論 0 10
  • 第一部分 Python基礎(chǔ)篇(80題) 1、為什么學(xué)習(xí)Python? Python相對(duì)于其他編程語(yǔ)言有很多優(yōu)點(diǎn): ...
    清清子衿木子水心閱讀 1,828評(píng)論 0 1

友情鏈接更多精彩內(nèi)容