You need to enable JavaScript to run this app. 如何在Flask中调用API并根据HTTP响应状态触发flash消息
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask中调用API并根据HTTP响应状态触发flash消息

解决方案

你当前代码的核心问题是直接对请求返回结果调用.json(),未提前判断HTTP响应状态,404响应时返回的结构和200成功响应完全不同,直接访问stats['achievements']会触发KeyError导致服务报错。按照以下步骤修改即可实现404时触发flash消息:

1. 前置配置确认

flash消息依赖Flask的session功能,必须先配置SECRET_KEY才能正常使用,在你的Flask初始化部分添加如下代码:

# 密钥可自行设置任意字符串
app.secret_key = "自定义的安全密钥字符串"

2. 修改视图函数逻辑

调整请求处理逻辑,先保存完整的响应对象,再根据状态码分支处理:

import urllib.parse
import requests
from flask import request, render_template, flash, redirect, url_for

@app.route('/player', methods=['GET', 'POST'])
def player():
    # GET请求直接渲染搜索页面
    if request.method == 'GET':
        return render_template('player.html')
    
    headers = header
    url = 'https://api.clashofclans.com/v1/players/{}'
    query = request.form.get('search')
    # 空输入校验
    if not query:
        flash("请输入要搜索的玩家ID")
        return redirect(url_for('player'))
    
    player_id = urllib.parse.quote(query)
    # 先获取完整响应对象,不直接转JSON
    resp = requests.get(url.format(player_id), headers=headers)
    
    if resp.status_code == 200:
        # 响应正常时解析数据渲染页面
        stats = resp.json()
        return render_template('player.html', stats=stats, data=stats['achievements'])
    elif resp.status_code == 404:
        # 404时触发flash提示,重定向回搜索页
        flash("未查询到对应玩家,请检查输入的ID是否正确")
        return redirect(url_for('player'))
    else:
        # 其他异常状态的通用提示
        flash(f"请求失败,错误码:{resp.status_code}")
        return redirect(url_for('player'))

3. 模板添加flash消息渲染

在player.html模板的页面顶部合适位置添加如下代码,用于展示flash消息:

{% with messages = get_flashed_messages() %}
  {% if messages %}
    {% for msg in messages %}
      <div class="alert">{{ msg }}</div>
    {% endfor %}
  {% endif %}
{% endwith %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 14:24:08