Django - 处理 KeyError 事件 (API)

Django - Handle KeyError event (API)

我用 Python/Django 制作了一个小天气应用程序。我从 openweathermap.org 获取了实际的天气数据。我设置了我的项目,创建了搜索字段来搜索城市并连接到 API 并且一切正常..直到你输入了错误的字母(例如 chikago)。然后我得到一个 KeyError。

在这里你可以看到我的代码 views.py

from django.shortcuts import render
import requests

def index(request):
    API_KEY = 'http://api.openweathermap.org/data/2.5/weather?q={}&units=metric&appid=123456789'
    city = request.POST.get('search_input')

    res = requests.get(API_KEY.format(city)).json()
    if city == '':
        city = 'Berlin'

    city_weather = {
        'city': res['name'],
        'temperature': res['main']['temp'],
        'description': res['weather'][0]['description'],
        'icon': res['weather'][0]['icon']
    }
    return render(request, 'weather/index.html', {'data': city_weather})

如果我查看检查器,我会看到错误 404,所以我尝试在基础 urls.py 中添加一个 handle404,但它没有捕获到内部错误。还有带有错误 404 消息的 openweathermap 响应:res {'cod': '404', 'message': 'city not found'}.

有没有办法将错误消息处理成 div?

您可以使用 .status_code 属性查看您发出的请求的响应代码

from django.shortcuts import render
<b>from django.http import HttpResponse</b>
import requests


def index(request):
    API_KEY = 'http://api.openweathermap.org/data/2.5/weather?q={}&units=metric&appid=123456789'
    city = request.POST.get('search_input')

    <b>request_response = requests.get(API_KEY.format(city))
    if request_response.status_code == 200:
        res = request_response.json()</b>
        city_weather = {
            'city': res['name'],
            'temperature': res['main']['temp'],
            'description': res['weather'][0]['description'],
            'icon': res['weather'][0]['icon']
        }
        return render(request, 'weather/index.html', {'data': city_weather})
    <b>else:
        return HttpResponse("Not Found")</b>

需要将请求转换为 json 对象。我无法详细编写上面共享的代码。 祝你好运