最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python用Flask封裝API及調(diào)用詳解

 更新時間:2025年08月11日 15:19:01   作者:AI手記叨叨  
本文介紹Flask的優(yōu)勢(輕量、靈活、易擴(kuò)展),對比GET/POST表單/JSON請求方式,涵蓋錯誤處理、開發(fā)建議及生產(chǎn)環(huán)境部署注意事項

一、Flask的優(yōu)勢

  • 輕量級:核心功能簡單,易于學(xué)習(xí)和使用
  • 靈活性:可以通過擴(kuò)展添加所需功能
  • 易擴(kuò)展性:豐富的擴(kuò)展生態(tài)系統(tǒng)(如Flask-RESTful、Flask-JWT等)
  • 開發(fā)效率高:快速原型開發(fā),適合中小型項目

一、基礎(chǔ)設(shè)置

先設(shè)置基本的Flask應(yīng)用結(jié)構(gòu),創(chuàng)建了一個Flask應(yīng)用實例,并定義了一個簡單的業(yè)務(wù)邏輯函數(shù)main(),它接收查詢文本和結(jié)果數(shù)量參數(shù),返回包含這些信息的字典。

from flask import Flask, request, Response, jsonify, abort
import json

app = Flask(__name__)

def main(query, k):
    """業(yè)務(wù)邏輯處理函數(shù)
    
    Args:
        query (str): 查詢文本
        k (int): 返回結(jié)果數(shù)量
    
    Returns:
        dict: 包含查詢參數(shù)和結(jié)果的字典
    """
    return {"query": query, "k": k, "status": "success"}

二、GET請求方式

GET請求是最常見的HTTP方法,參數(shù)通過URL傳遞,適合簡單的數(shù)據(jù)查詢。

特點

  • 參數(shù)通過URL傳遞(查詢字符串)
  • 有長度限制(不同瀏覽器限制不同,通常約2048字符)
  • 請求可以被緩存、保留在瀏覽器歷史記錄中
  • 不應(yīng)用于敏感數(shù)據(jù)傳輸

服務(wù)端代碼

模擬業(yè)務(wù)邏輯

@app.route('/api/search', methods=['GET'])
def handle_get():
    """處理GET請求
    
    參數(shù)通過URL查詢字符串傳遞:
    - query: 必需,字符串類型
    - k: 可選,整數(shù)類型,默認(rèn)為1
    
    Returns:
        Response: JSON格式的響應(yīng)
    """
    # 獲取并驗證參數(shù)
    query = request.args.get("query")
    if not query:
        abort(400, description="query參數(shù)不能為空")
    
    try:
        k = int(request.args.get("k", 1))  # 默認(rèn)為1
    except ValueError:
        abort(400, description="k必須是整數(shù)")
    
    # 調(diào)用業(yè)務(wù)邏輯
    result = main(query, k)
    
    # 返回JSON響應(yīng)
    return jsonify(result)

客戶端調(diào)用

import requests

# 構(gòu)造URL參數(shù)
params = {
    'query': 'Python Flask',
    'k': 3
}

# 發(fā)送GET請求
response = requests.get(
    url="http://127.0.0.1:8000/api/search",
    params=params
)

# 處理響應(yīng)
if response.status_code == 200:
    print(response.json())
else:
    print(f"請求失敗,狀態(tài)碼: {response.status_code}, 錯誤: {response.text}")

三、POST表單方式

POST表單方式適合傳統(tǒng)的網(wǎng)頁表單提交,數(shù)據(jù)通過HTTP body以application/x-www-form-urlencoded格式傳輸。

特點

  • 數(shù)據(jù)通過HTTP body傳輸
  • 使用application/x-www-form-urlencoded編碼格式
  • 沒有長度限制
  • 不會顯示在URL中
  • 適合提交敏感數(shù)據(jù)或大量數(shù)據(jù)

服務(wù)端代碼

@app.route('/api/form-submit', methods=['POST'])
def handle_post_form():
    """處理表單POST請求
    
    參數(shù)通過表單數(shù)據(jù)傳遞:
    - query: 必需,字符串類型
    - k: 可選,整數(shù)類型,默認(rèn)為1
    
    Returns:
        Response: JSON格式的響應(yīng)
    """
    # 獲取并驗證參數(shù)
    query = request.form.get("query")
    if not query:
        abort(400, description="query參數(shù)不能為空")
    
    try:
        k = int(request.form.get("k", 1))  # 默認(rèn)為1
    except ValueError:
        abort(400, description="k必須是整數(shù)")
    
    # 調(diào)用業(yè)務(wù)邏輯
    result = main(query, k)
    
    # 返回JSON響應(yīng)
    return jsonify(result)

客戶端調(diào)用

import requests

# 準(zhǔn)備表單數(shù)據(jù)
form_data = {
    'query': '表單提交示例',
    'k': 2
}

# 發(fā)送POST請求
response = requests.post(
    url="http://127.0.0.1:8000/api/form-submit",
    data=form_data
)

# 處理響應(yīng)
if response.status_code == 200:
    print(response.json())
else:
    print(f"請求失敗,狀態(tài)碼: {response.status_code}, 錯誤: {response.text}")

四、POST JSON方式

POST JSON方式是現(xiàn)代API常用的數(shù)據(jù)交換格式,適合傳輸結(jié)構(gòu)化數(shù)據(jù)。

特點

  • 數(shù)據(jù)通過HTTP body傳輸
  • 使用application/json內(nèi)容類型
  • 支持復(fù)雜數(shù)據(jù)結(jié)構(gòu)(嵌套對象、數(shù)組等)
  • 是現(xiàn)代Web和移動應(yīng)用的首選方式
  • 易于與前端框架(如React、Vue)集成

服務(wù)端代碼

@app.route('/api/json-submit', methods=['POST'])
def handle_post_json():
    """處理JSON POST請求
    
    參數(shù)通過JSON格式傳遞:
    - query: 必需,字符串類型
    - k: 可選,整數(shù)類型,默認(rèn)為1
    
    Returns:
        Response: JSON格式的響應(yīng)
    """
    # 驗證請求內(nèi)容類型
    if not request.is_json:
        abort(415, description="請求必須是JSON格式")
    
    # 獲取JSON數(shù)據(jù)
    data = request.get_json()
    
    # 驗證參數(shù)
    query = data.get("query")
    if not query:
        abort(400, description="query參數(shù)不能為空")
    
    try:
        k = int(data.get("k", 1))  # 默認(rèn)為1
    except ValueError:
        abort(400, description="k必須是整數(shù)")
    
    # 調(diào)用業(yè)務(wù)邏輯
    result = main(query, k)
    
    # 返回JSON響應(yīng)
    return jsonify(result)

客戶端調(diào)用

import requests

# 準(zhǔn)備JSON數(shù)據(jù)
json_data = {
    'query': 'JSON數(shù)據(jù)示例',
    'k': 4
}

# 發(fā)送POST請求
response = requests.post(
    url="http://127.0.0.1:8000/api/json-submit",
    json=json_data,  # 自動設(shè)置Content-Type為application/json
    headers={'Accept': 'application/json'}  # 明確要求JSON響應(yīng)
)

# 處理響應(yīng)
if response.status_code == 200:
    print(response.json())
else:
    print(f"請求失敗,狀態(tài)碼: {response.status_code}, 錯誤: {response.text}")

五、錯誤處理

Flask提供了完善的錯誤處理機(jī)制

@app.errorhandler(400)
def bad_request(error):
    return jsonify({
        'status': 'error',
        'message': error.description
    }), 400

@app.errorhandler(404)
def not_found(error):
    return jsonify({
        'status': 'error',
        'message': '資源不存在'
    }), 404

@app.errorhandler(415)
def unsupported_media_type(error):
    return jsonify({
        'status': 'error',
        'message': error.description
    }), 415

六、對比

方式適用場景數(shù)據(jù)位置客戶端調(diào)用方法服務(wù)端獲取方法
GET簡單查詢,參數(shù)少URL查詢字符串requests.get()request.args
POST表單傳統(tǒng)網(wǎng)頁表單提交HTTP Bodyrequests.post(data=)request.form
POST JSON現(xiàn)代API,復(fù)雜數(shù)據(jù)結(jié)構(gòu)HTTP Bodyrequests.post(json=)request.get_json()

實踐建議

  • 使用jsonify()代替手動JSON序列化
  • 為所有API端點添加前綴(如/api/)
  • 實現(xiàn)統(tǒng)一的錯誤處理
  • 為每個端點編寫詳細(xì)的文檔字符串
  • 在生產(chǎn)環(huán)境使用WSGI服務(wù)器(如Gunicorn)
  • 添加適當(dāng)?shù)恼J(rèn)證和限流機(jī)制

七、啟動

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000, debug=True)

注意:生產(chǎn)環(huán)境不應(yīng)使用debug=True,且應(yīng)通過WSGI服務(wù)器運行應(yīng)用。

八、總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • PyTorch中torch.manual_seed()的用法實例詳解

    PyTorch中torch.manual_seed()的用法實例詳解

    在Pytorch中可以通過相關(guān)隨機(jī)數(shù)來生成張量,并且可以指定生成隨機(jī)數(shù)的分布函數(shù)等,下面這篇文章主要給大家介紹了關(guān)于PyTorch中torch.manual_seed()用法的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Python實現(xiàn)文本特征提取的方法詳解

    Python實現(xiàn)文本特征提取的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Python實現(xiàn)提取四種不同文本特征的方法,有字典文本特征提取、英文文本特征提取、中文文本特征提取和TF-IDF 文本特征提取,感興趣的可以了解一下
    2022-08-08
  • Pytorch 的 LSTM 模型的示例教程

    Pytorch 的 LSTM 模型的示例教程

    本文給大家介紹了Pytorch 的 LSTM 模型的示例教程,文中結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-06-06
  • Python并查集Disjoint?Set的具體使用

    Python并查集Disjoint?Set的具體使用

    本文主要介紹了Python并查集Disjoint?Set的具體使用,包括并查集的基本概念、實現(xiàn)方式、路徑壓縮和應(yīng)用場景,并使用代碼示例演示并查集的操作,感興趣的可以了解一下
    2024-01-01
  • Pandas如何將Timestamp轉(zhuǎn)為datetime類型

    Pandas如何將Timestamp轉(zhuǎn)為datetime類型

    這篇文章主要介紹了Pandas如何將Timestamp轉(zhuǎn)為datetime類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 2026年最值得投入學(xué)習(xí)的PythonAI框架top10排行榜

    2026年最值得投入學(xué)習(xí)的PythonAI框架top10排行榜

    本文推薦了2026年最值得投入學(xué)習(xí)的PythonAI框架,從Num社區(qū)活躍度、生產(chǎn)就就緒度、學(xué)習(xí)曲線和前景指數(shù)四個維度綜合評分,這些框架適用于不同從數(shù)據(jù)分析師到企業(yè)AI應(yīng)用工程師的各種角色
    2026-04-04
  • Python requests的SSL證書驗證方式

    Python requests的SSL證書驗證方式

    這篇文章主要介紹了Python-requests的SSL證書驗證方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • python 利用opencv實現(xiàn)圖像網(wǎng)絡(luò)傳輸

    python 利用opencv實現(xiàn)圖像網(wǎng)絡(luò)傳輸

    這篇文章主要介紹了python 如何利用opencv實現(xiàn)圖像網(wǎng)絡(luò)傳輸,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • 5個快速上手的Python PyBlueZ藍(lán)牙開發(fā)技巧分享

    5個快速上手的Python PyBlueZ藍(lán)牙開發(fā)技巧分享

    PyBlueZ作為Python藍(lán)牙編程的重要工具,為開發(fā)者提供了簡單高效的藍(lán)牙通信解決方案,本文將從實際應(yīng)用角度出發(fā),分享5個實用的開發(fā)技巧,幫助你快速掌握Python藍(lán)牙編程,希望對大家有所幫助
    2026-01-01
  • PyQt5入門之基于QListWidget版本實現(xiàn)圖片縮略圖列表功能

    PyQt5入門之基于QListWidget版本實現(xiàn)圖片縮略圖列表功能

    這篇文章主要介紹了PyQt5入門之基于QListWidget版本實現(xiàn)圖片縮略圖列表功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09

最新評論

合川市| 新密市| 门源| 泸定县| 思茅市| 航空| 石柱| 蒙山县| 沅陵县| 屏山县| 陵水| 蛟河市| 磴口县| 若尔盖县| 吉林省| 彭泽县| 特克斯县| 韩城市| 忻城县| 武川县| 乐至县| 安宁市| 若羌县| 石首市| 密云县| 宜兰市| 县级市| 晋州市| 株洲市| 上杭县| 崇左市| 金平| 仪陇县| 永善县| 邯郸县| 泸州市| 唐海县| 吉安市| 长春市| 石首市| 信丰县|