Пытаюсь сделать вызов API, но продолжаю получать TypeError
У меня не получается сделать простой вызов API в Django для поиска доступных рейсов.
Согласно документации API, он принимает параметры date_from
и date_to
в строковом формате 'MM/DD/YYYY'.
Я пытаюсь преобразовать формат вводимой даты из HTML-формы ('YYYY-MM-DD') в 'MM/DD/YYYY', используя strptime
и strftime
, но, похоже, ничего не получается.
Я получаю 'TypeError at /strptime() argument 1 must be str, not None'
Что я делаю не так?
home.html
<!DOCTYPE html>
{% load static %}
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Home</title>
</head>
<body>
{{ response }}
<form method="post">
{% csrf_token %}
<h3>Search Form</h3>
<p>
<input type="text" name="Origin" id="inputOrigin" placeholder="From" required>
</p>
<p>
<input type="text" name="Destination" id="inputDestination" placeholder="To" required>
</p>
<p>
<input type="date" name="Departuredate" id="idDeparturedate" required>
</p>
<p>
<input type="number" name="Adults" id="idAdults" required>
</p>
<input type="Submit" name="Submit" value="Submit">
</form>
</body>
</html>
views.py
from django.shortcuts import render
import requests
import datetime as dt
# Create your views here.
def home(request):
origin = request.POST.get('Origin')
destination = request.POST.get('Destination')
dep_date = request.POST.get('Departuredate')
adults = request.POST.get('Adults')
departure_date = dt.datetime.strptime(dep_date,'%Y-%m-%d').strftime('%d/%m/%Y')
kwargs = {
'apikey':'UkyTNeGok4791FIGnTeFMD6UrooUWXoI',
'fly_from':origin,
'fly_to':destination,
'date_from':departure_date,
'date_to':departure_date,
'adults':adults
}
r = requests.get('https://tequila-api.kiwi.com/',params=kwargs).json()
return render(request,'searchmyflight/home.html',{'response':r})
Когда вы впервые открываете веб-страницу, вы отправляете запрос GET.
В этом представлении вы пытаетесь получить значения POST, даже если текущий метод - GET. Значения POST отсутствуют. Поэтому выдает ошибку.
Вы можете использовать request.method
только для выполнения части с POST-значениями, когда метод - POST. См. ниже.
from django.shortcuts import render
import requests
from django.conf import settings
import datetime as dt
def home(request):
r = None
if request.method == 'POST':
origin = request.POST.get('Origin')
destination = request.POST.get('Destination')
dep_date = request.POST.get('Departuredate')
adults = request.POST.get('Adults')
departure_date = dt.datetime.strptime(dep_date, '%Y-%m-%d').strftime('%d/%m/%Y')
kwargs = {
'apikey': settings.API_KEY,
'fly_from': origin,
'fly_to': destination,
'date_from': departure_date,
'date_to': departure_date,
'adults': adults
}
r = requests.get('https://tequila-api.kiwi.com/', params=kwargs).json()
return render(request, 'searchmyflight/home.html', {'response': r})
Также в качестве примечания вы можете рассмотреть возможность хранения ключей API в файле настроек.