Flask Web API構建實例:GET、POST文件上傳、靜態資源下載一網打盡

来源:https://www.cnblogs.com/hanbing81868164/archive/2023/12/27/17929716.html
-Advertisement-
Play Games

以下是一個通過 Flask 構建 Web API 服務的詳細示例,包含了各類請求(GET、POST、文件上傳、靜態資源下載)、每個方法獨立配置路由、參數接收和解析、請求日誌記錄以及異常日誌記錄。請確保你已經安裝了 Flask,你可以使用以下命令進行安裝: pip install Flask 接下來是 ...


 

以下是一個通過 Flask 構建 Web API 服務的詳細示例,包含了各類請求(GET、POST、文件上傳、靜態資源下載)、每個方法獨立配置路由、參數接收和解析、請求日誌記錄以及異常日誌記錄。請確保你已經安裝了 Flask,你可以使用以下命令進行安裝:

pip install Flask

接下來是一個包含詳細註釋的源代碼示例:

from flask import Flask, request, send_from_directory
import logging

app = Flask(__name__)

# 配置日誌
logging.basicConfig(filename='api.log', level=logging.DEBUG, format='%(asctime)s [%(levelname)s] - %(message)s')

# 定義路由和資源
@app.route('/hello', methods=['GET', 'POST'])
def hello_world():
    if request.method == 'GET':
        # 記錄請求日誌
        logging.info('GET 請求收到')
        return {'message': '你好,世界!'}
    elif request.method == 'POST':
        # 獲取請求中的參數
        data = request.get_json()

        # 記錄請求日誌
        logging.info(f'POST 請求收到,數據:{data}')

        # 模擬處理數據
        try:
            result = data['input'] * 2
            return {'result': result}
        except KeyError as e:
            # 記錄異常日誌
            logging.error(f'請求數據中缺少鍵: {e}')
            return {'error': '無效的請求數據'}, 400

# 文件上傳
@app.route('/upload', methods=['POST'])
def upload_file():
    # 獲取上傳的文件
    file = request.files['file']

    # 記錄請求日誌
    logging.info(f'文件上傳請求收到: {file.filename}')

    # 保存文件到伺服器
    file.save(f'uploads/{file.filename}')

    return {'message': '文件上傳成功'}

# 靜態資源下載
@app.route('/static/<path:filename>')
def serve_static(filename):
    return send_from_directory('static', filename)

# 啟動應用
if __name__ == '__main__':
    app.run(debug=True)

在這個例子中:

  • /hello 路由包含了 GET 和 POST 方法,演示瞭如何獲取請求中的參數,並記錄請求日誌和異常日誌。
  • /upload 路由處理了文件上傳請求,將文件保存到伺服器的 uploads 目錄中,並記錄請求日誌。
  • /static/<path:filename> 路由配置用於提供靜態資源下載。

你可以通過以下方式進行測試:

  • GET 請求:http://127.0.0.1:5000/hello
  • POST 請求:http://127.0.0.1:5000/hello,請求體為 JSON 格式的數據。
  • 文件上傳:使用 POST 請求 http://127.0.0.1:5000/upload,併在請求中添加一個文件。
  • 靜態資源下載:http://127.0.0.1:5000/static/example.txt(示例文件名)。

運行這個腳本後,你可以在瀏覽器或工具中查看返回的數據,併在腳本所在目錄下的 api.log 文件中找到日誌記錄。這個示例提供了一個基本框架,你可以根據實際需求擴展和修改。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第十七章著重講解了異常處理的方法。傳統單體架構下,全局異常處理類通過實現HandlerExceptionResolver介面實現異常的統一處理,可以根據不同異常返回不同的錯誤頁面。但在前後端分離的開發中,使用@ControllerAdvice和@ExceptionHandler註解更為方便。@Con... ...
  • 最近都沒啥時間,很久沒更新了。 今天分享一下,如何用selenium識別驗證碼,實現自動登錄以及獲取數據。 目標:某東 話不多說直接開始 準備工作 環境 Python 3.10 Pycharm 模塊使用 import random import time from selenium import w ...
  • Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程式,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹`TableView`與`TreeView`組件聯動的常用方法及靈活運用。本章我們繼續實現表格的聯動效果,當讀者點... ...
  • 來源:https://juejin.cn/post/7169567387527282701 先總結: 數據量小的時候,用join更划算 數據量大的時候,join的成本更高,但相對來說join的速度會更快 數據量過大的時候,in的數據量過多,會有無法執行SQL的問題,待解決 事情是這樣的,去年入職的新 ...
  • 官方介面圖 我實際會用到的就幾個介面,背面的話就一個M.2固態的位置: 其中WIFI模塊的介面應該也可以插2230的固態,不過是pcie2.0的速度,背面的介面則是pcie3.0*4的速度,差距還是挺大的。 開始安裝系統 準備工作 一張記憶體卡(如果買的時候沒有emmc的話) 下載並安裝balenaE ...
  • 目錄下載rustup-init.exe(Rust安裝工具)使用鏡像加速rustup安裝安裝Rust安裝標準庫源碼使用鏡像加速cargo包下載安裝結果確認更新、卸載和文檔查看參考文檔 下載rustup-init.exe(Rust安裝工具) 下載安裝程式 https://www.rust-lang.or ...
  • 隨著人們對個人命運的關註度不斷提高,很多人開始尋找各種方法來預測未來,把握機遇。而其中一種被廣泛使用的方法就是八字預測。通過分析個人的生辰八字,可以揭示出一個人未來的發展趨勢和潛在的機遇。如今,挖數據平臺提供了一個八字命運API介面,可以幫助用戶進行八字預測,免費算命,讓人們更好地瞭解自己的未來。 ...
  • 課程要點 瞭解布爾類型 瞭解整數類型 瞭解浮點數類型 瞭解複數類型 瞭解字元串類型 瞭解字元類型 布爾類型 類型 名稱 取值範圍 說明 bool 布爾類型 true或false 預設值為false 示例 ok := true println(ok) 整數類型 類型 名稱 取值範圍 說明 uint8 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...