You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Flask API中通过Google授权码读取受限Google Sheet

用Flask后端基于Google登录授权码读取受限Google Sheet数据

步骤1:用授权码换取访问令牌与刷新令牌

拿到前端传来的auth_code后,先向Google OAuth2服务器请求换取短期有效的访问令牌,以及用于续期的刷新令牌。在Flask中可通过requests库实现:

import requests

def exchange_code_for_tokens(auth_code):
    token_url = "https://oauth2.googleapis.com/token"
    payload = {
        "client_id": "你的Google客户端ID",
        "client_secret": "你的Google客户端密钥",
        "code": auth_code,
        "grant_type": "authorization_code",
        "redirect_uri": "你的前端授权回调地址(需与Google控制台配置一致)"
    }
    response = requests.post(token_url, data=payload)
    return response.json()

步骤2:调用Google Sheets API读取数据

拿到access_token后,即可请求Sheets API读取指定表格数据。注意:前端发起登录请求时,必须带上https://www.googleapis.com/auth/spreadsheets.readonly权限范围,否则无法访问受限表格。

def read_google_sheet(access_token, spreadsheet_id, sheet_range):
    sheets_api_url = f"https://sheets.googleapis.com/v4/spreadsheets/{spreadsheet_id}/values/{sheet_range}"
    headers = {"Authorization": f"Bearer {access_token}"}
    response = requests.get(sheets_api_url, headers=headers)
    
    # 处理令牌过期情况
    if response.status_code == 401:
        new_token = refresh_access_token(token_data["refresh_token"])
        headers["Authorization"] = f"Bearer {new_token['access_token']}"
        response = requests.get(sheets_api_url, headers=headers)
    
    return response.json()

def refresh_access_token(refresh_token):
    token_url = "https://oauth2.googleapis.com/token"
    payload = {
        "client_id": "你的Google客户端ID",
        "client_secret": "你的Google客户端密钥",
        "refresh_token": refresh_token,
        "grant_type": "refresh_token"
    }
    response = requests.post(token_url, data=payload)
    return response.json()

步骤3:Flask路由整合示例

将上述逻辑整合到Flask接口中:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/read-sheet', methods=['POST'])
def read_sheet():
    auth_code = request.json.get('auth_code')
    if not auth_code:
        return jsonify({"error": "缺少授权码"}), 400
    
    # 换取令牌
    token_data = exchange_code_for_tokens(auth_code)
    if "error" in token_data:
        return jsonify(token_data), 400
    
    # 读取指定范围数据,示例:spreadsheetId为表格ID,range格式如'Sheet1!A1:D10'
    sheet_data = read_google_sheet(
        token_data["access_token"],
        "你的Google Sheet ID",
        "Sheet1!A1:D10"
    )
    return jsonify(sheet_data)

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

关键注意事项

  • 需在Google Cloud控制台启用Google Sheets API,并正确配置OAuth2 Web客户端(回调地址需与代码中一致)。
  • 刷新令牌需妥善存储(如数据库),避免重复要求用户授权。

内容的提问来源于stack exchange,提问作者coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:45:11