首页 > 解决方案 > 如何使用 Django 将数据从谷歌图书 API 发布到您的图书模型

问题描述

我知道这是我的第一个问题,我不会喜欢在这里写它,但我有一个问题,我现在无法处理 2 天。

我正在用 Django 编写一个应用程序,我的目标是处理来自谷歌图书 API 的请求并在我所做的模板中显示图书。我写了一个这样的函数

服务.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 的十本书的值对。

我将它们传递给这样的模板

视图.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,但实际上,我不知道如何解决这个问题。

拜托,你能帮帮我吗?

比你提前。

标签: pythondjangorestdjango-rest-frameworkgoogle-books

解决方案


推荐阅读