以下是一個通過 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 文件中找到日誌記錄。這個示例提供了一個基本框架,你可以根據實際需求擴展和修改。