flask實現api接口以及GET&POST請求參數等的注意事項


上一篇我們講到了flask的初步搭建,本章將講解flask實現api接口以及get與post請求的演示,

新手搭建flask框架並啟動以及flask啟動接口地址的修改

一、注解介紹

  在寫代碼之前呢,我們先來介紹幾個“注解”,在Python中叫“裝飾器”。

  裝飾器其實就是在一個函數內部定義另外一個函數,然后返回一個新的函數,即動態的給一個對象添加額外的職責。還沒明白的話,呃呃呃...先記着功能吧。

  1、@app.route()

    在flask中,@app.route()的作用主要是注冊路徑,相當於是一個路由。

    我們所見到的接口路徑是http://127.0.0.2:8088/aaa/bbb,而在app.py中我們可以利用@app.route()幫助我們實現/aaa/這一層的路徑標識。

    例如:@app.route('/aaa')所訪問的接口就是http://127.0.0.2:8088/aaa/

 

  2、@infoModule.route()

     在flask中,@infoModule.route()的作用主要也是注冊路徑。

    他可以幫助我們區分是哪個模塊的路徑,例如:http://127.0.0.2:8088/aaa/bbb/中的bbb

二、flask藍圖(Blueprint

  在此演示的只是接口的開發與調用,我們通常使用的接口路徑為:“ip:端口號/模塊名/接口名”的方式,在很多系統開發中,會有很多的模塊,有很多人會想到在app.py中寫很多個@app.route()來解決,但這樣會將來維護代碼會非常麻煩,而且容易出錯。這時就要用到flask內置了一個模塊化處理的類,即flask藍圖(Blueprint)。

  Blueprint 是一個存儲操作方法的容器,這些操作在這個Blueprint 被注冊到一個應用之后就可以被調用,Flask 可以通過Blueprint來組織URL以及處理請求。

  藍圖的使用:

  1、創建一個藍圖對象

    在controller文件中創建一個藍圖對象:

testModule = Blueprint('testModule',__name__)

  2、在app.py中注冊路由,生成應用對象

app = Flask(__name__)
@app.route('/') def hello_world(): return 'flask_test is running!!!'

  3、在應用對象中注冊這個藍圖對象

app.register_blueprint(testModule, url_prefix='/testModule')

  當這個應用啟動后,通過/testModle/可以訪問到藍圖中定義的視圖函數

 

三、接口開發

  前期准備:

  首先在項目根目錄下面創建一個controller文件夾,然后創建一個test_controller.py的文件(名字自定義都行,等會import時注意路徑就行)。

  

  test_controller.py文件的編寫:

import json
import datetime
from flask import Blueprint,url_for,request,render_template,session,redirect

# 創建了一個藍圖對象
testModule = Blueprint('testModule',__name__)

  app.py文件的編寫:

from flask import Flask
from controller.test_controller import testModule

app = Flask(__name__)
app.register_blueprint(testModule, url_prefix
='/testModule') @app.route('/') def hello_world(): return 'flask_test is running!!!' if __name__ == '__main__': app.run(port=8088)

  

  完成以上准備工作后就可以進行接口的開發,只需要在test_controller.py文件中添加如下代碼即可:

  1、GET請求無參數

"""
    GET請求,不帶參數
"""
@testModule.route("/get_test1",methods=["GET"])
def get_test1():
    # 默認返回內容
    return_dict = {'return_code': '200', 'return_info': '處理成功', 'result': None}
    return json.dumps(return_dict, ensure_ascii=False)

   效果:

  2、GET請求,帶參數

"""
    GET請求,帶參數
"""
@testModule.route("/get_test2",methods=["GET"])
def get_test2():
    # 默認返回內容
    return_dict = {'return_code': '200', 'return_info': '處理成功', 'result': None}
    # 判斷入參是否為空
    if len(request.args) == 0:
        return_dict['return_code'] = '5004'
        return_dict['return_info'] = '請求參數為空'
        return json.dumps(return_dict, ensure_ascii=False)
    # 獲取傳入的params參數
    get_data = request.args.to_dict()
    name = get_data.get('name')
    age = get_data.get('age')
    return_dict['result'] = "%s今年%s歲:%s" %(name,age,datetime.datetime.now())
    return json.dumps(return_dict, ensure_ascii=False)

效果:

   3、POST請求,帶參數

"""
    POST請求,帶參數
"""
@testModule.route("/post_test1", methods=["POST"])
def post_test1():
    #默認返回內容
    return_dict = {'return_code':'200','return_info':'處理成功','result':None}

    # 判斷傳入的json數據是否為空
    if len(request.get_data()) == 0:
        return_dict['return_code'] = '5004'
        return_dict['return_info'] = '請求參數為空'
        return json.dumps(return_dict, ensure_ascii=False)
    name = request.values.get('name')
    age = request.values.get('age')
    # 對參數進行操作
    return_dict['result'] = "%s今年%s歲:%s" %(name,age,datetime.datetime.now())
    print(return_dict)
    return json.dumps(return_dict,ensure_ascii=False)

效果:

 四、小結

  GET請求與POST請求獲取參數的方式不同,所以在獲取參數時需要注意設定的請求類型,出於安全考慮,一般一般只用POST請求傳參。

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM