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/