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

Flask接收HTML表单输入调用天气API报错问题求助

Flask天气查询代码问题分析与修复

核心问题梳理

  • response变量未定义:response仅在POST请求分支内初始化,GET请求时未执行该分支,后续判断response.status_code会触发NameError。
  • 表单取值语法错误:request.form.get["city"]写法错误,get是字典方法,需用括号调用:request.form.get("city")。
  • 缺失有效响应返回:else分支无实际返回内容,Flask视图函数必须返回合法响应,否则触发500内部服务器错误。
  • 模板数据未传递:成功获取数据后,未将天气、温度变量传给模板,页面无法展示结果。

修复后的完整代码

from flask import Flask, request, render_template, redirect
import requests

app = Flask(__name__)

@app.route('/weather', methods=["GET","POST"])
def weather():
    API_KEY = "SOME KEY I GOT"
    BASE_URL = "https://api.openweathermap.org/data/2.5/weather"
    # 初始化response变量,避免GET请求时未定义
    response = None

    if request.method == "POST":
        city = request.form.get("city")  # 修正get方法调用语法
        if city:  # 增加城市名非空判断
            request_url = f"{BASE_URL}?appid={API_KEY}&q={city}"
            response = requests.get(request_url)

    # 先判断response是否存在,再检查状态码
    if response and response.status_code == 200:
        data = response.json()
        weather_desc = data['weather'][0]['description']
        temperature = round(data["main"]["temp"] - 273.15, 2)
        # 将数据传递给模板
        return render_template("weather.html", weather=weather_desc, temp=temperature)
    else:
        # 重定向到首页或返回错误提示
        return redirect("/index")

额外优化建议

  • 增加城市名非空校验,避免空字符串调用API导致无效请求。
  • 处理API返回的异常情况(如城市不存在时的JSON解析错误),可以用try-except包裹json解析逻辑。
  • 将API_KEY放到环境变量中,避免硬编码敏感信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:35:55