Как отправить данные из API книг Google в модель Book с помощью Django - PullRequest
1 голос
/ 20 февраля 2020

Я знаю, что это мой первый вопрос, и я не хотел бы писать его здесь, но у меня есть проблема, с которой я не мог справиться в течение 2 дней.

Я пишу приложение в Django, и моя цель - обрабатывать запросы от API книг Google и отображать книги в шаблоне, который я сделал. Я написал такую ​​функцию

services.py

from googleapiclient.discovery import build
import json


def get_books_data(query):
    """Retriving data from google books API"""

    service = build('books', 
                    'v1', 
                    developerKey=API_KEY
                    )
    request = service.volumes().list(q=query)
    response = request.execute()
    book_list = [response['items'][item]['volumeInfo']
                 for item in range(len(response['items']))]

    return book_list

Я получаю список пар ключ: значение, представляющих десять книг из API.

Я передал их в такой шаблон

views.py

def search(request):

query = request.GET.get('q')
books = get_books_data(query)
context = {

    'books': books
}

return render(request, 'books_list.html', context)

Вот как выглядит book_list. html.

list_book. html

{% extends 'base.html' %}
{% load static %}
{% block content%}
  {% for book in books %}
    <div class="row">
      <div class="col-lg-8 mx-auto">
        <ul class="list-group shadow">
          <li class="list-group-item">
            <div class="media align-items-lg-center flex-column flex-lg-row p-3">
              <div class="media-body order-2 order-lg-1">
                <h5 class="mt-0 font-weight-bold mb-2">{{ book.title }}</h5>
                <p class="font-italic text-muted mb-0 small">{{ book.subtitle }}</p>
                {% for identifier in book.industryIdentifiers %}
                  <p class="font-italic text-muted mb-0 small">{{ identifier.type }} : {{ identifier.identifier }}</p>
                {% endfor  %}
                <p class="font-italic text-muted mb-0 small">Language: {{ book.language }}</p>
                <p class="font-italic text-muted mb-0 small">Published date: {{ book.publishedDate }}</p>
                <div class="media-body order-2 order-lg-1">
                {% if book.authors %}
                <h6 class="font-weight-bold my-2">Authors:</h6>
                {% for author in book.authors %}
                  <p class="font-italic text-muted mb-0 small">{{ author }}</p>
                {% endfor %}
                {% endif %}
                </div>
                {% if book.pageCount %}
                <div class="d-flex align-items-center justify-content-between mt-1">
                  <h6 class="font-weight-bold my-2">Number of pages: {{book.pageCount}}</h6>
                </div>
                {% endif %}
              </div>
              {% if book.imageLinks %}
                <img class="thumbnail" src="{{book.imageLinks.thumbnail}}" alt="">
              {% else %}
                <img class="thumbnail2" src="{% static 'images/placeholder4.png'%}" alt="">
              {% endif %}
            </div>
            <form action="." method="post">
              {% csrf_token %}
              <button type="submit" class="btn btn-primary">ADD THIS BOOK TO YOUR BOOKSHELF</button>
            </form>
          </li>
        </ul>
      </div>
    </div>
  {% endfor %}
{% endblock content %}

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

Пожалуйста, вы можете мне помочь?

Чем вы заранее.

...