Django лучший способ избежать KeyError?

Я создавал простое приложение для работы с погодой на Django. Это приложение позволяет пользователю ввести название города, и оно предоставит информацию о погоде в этом городе. Для получения данных я использую API.

Я хотел избежать KeyError, когда пользователь вводит пустую строку или неправильно пишет город. Я вроде как достиг своей цели, но мне интересно, есть ли более простой способ сделать это.

Вот мой код:

from django.shortcuts import render
import requests
from datetime import datetime
import geonamescache  # Used for match checking


def home(request):

    # Checks for legitimate cities
    if 'search-city' in request.POST:
        gc = geonamescache.GeonamesCache()
        while request.POST['search-city'] != '':
            cities = str(gc.get_cities_by_name(request.POST['search-city']))
            if request.POST['search-city'] in cities:
                city = request.POST['search-city']
                break
            elif request.POST['search-city'] not in cities:
                city = 'Amsterdam'
                break

        while request.POST['search-city'] == '':
            city = 'Amsterdam'
            break

    # Call current weather
    URL = 'https://api.openweathermap.org/data/2.5/weather'
    API_KEY = 'MY_KEY'
    PAR = {

        'q': city,
        'appid': API_KEY,
        'units': 'metric'
    }

    req = requests.get(url=URL, params=PAR)
    res = req.json()

    city = res['name']
    description = res['weather'][0]['description']
    temp = res['main']['temp']
    icon = res['weather'][0]['icon']
    country = res['sys']['country']
    day = datetime.now().strftime("%d/%m/%Y %H:%M")

    weather_data = {

        'description': description,
        'temp': temp,
        'icon': icon,
        'day': day,
        'country': country,
        'city': city
    }

    return render(request, 'weatherapp/home.html', weather_data)

Не могли бы вы показать мне, как вы это делаете? Спасибо!

Я лично не использовал это, но Django и другие фреймворки предоставляют способ сделать что-то под названием "Form Validation". https://docs.djangoproject.com/en/4.0/ref/forms/validation/, но это потребует наличия еще нескольких вещей, например, класса, который моделирует то, как выглядит ваша форма: https://docs.djangoproject.com/en/4.0/topics/forms/

Вернуться на верх