Пытаюсь сделать вызов 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 в файле настроек.

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