Мне нужно создать представление, которое импортирует данные из API книг Google и сохраняет их в моей модели.Пока у меня есть такая точка зрения, но я не знаю, как это сделать в Django, и я не знаю, хорошо ли это и что будет дальше.
def book_search(self, request):
value = ''
apikey = ''
params = {'q': value, 'key': apikey}
response = request.get('https://www.googleapis.com/books/v1/volumes', params=params)
bookapi = response.json()
<< <strong>Actualization >>
Хорошо, я попытался построить свое представление, но теперь я получаю ошибку:
AttributeError: у объекта 'NoneType' нет атрибута 'split'
Когда я пытаюсьзапустить мой взгляд.Я получаю свою форму, но когда я пытаюсь выполнить запрос POST для заполненной формы, я получаю сообщение об ошибке.
просмотров:
class GoogleBooks(View):
model = Book
form_class = SearchBookForm
template_name = 'books/import_book.html'
def get(self, request, *args, **kwargs):
form = self.form_class()
return render(request, self.template_name, {'form': form})
def search(self, value):
googleapikey = ""
params = {"q": value, 'key': googleapikey}
google_books = self.request.get(url="https://www.googleapis.com/books/v1/volumes", params=params)
book_dict = google_books.json()
return book_dict
def post(self, request, *args, **kwargs):
form = self.form_class(self.request.POST)
if form.is_valid():
text = form.cleaned_data['key_word']
bookshelf = self.search(text)
booklist = 0
for book in bookshelf:
new_book = Book.objects.create(
title=book['items'][booklist]['volumeInfo']['title'],
published_date=book['items'][booklist]['volumeInfo']['publishedDate'][:3],
pages=book['items'][booklist]['volumeInfo']['pageCount'],
language=book['items'][booklist]['volumeInfo']['language'],
)
booklist += 1
new_book.save()
return redirect(reverse('books_index'))
else:
return redirect(reverse('add_book'))
формы:
class SearchBookForm(forms.Form):
key_word = forms.CharField()
template:
{% extends "books/base.html" %}
{% load bootstrap %}
{% block content %}
<form method="GET">
{{ form.as_p}}
<button type="Submit" class="btn btn-primary">Search</button>
</form>
{% endblock %}
Это то, что я пытался найти проблему, но это работает очень хорошо, и я получаю именно то, что я хочу:
import os
import requests
import json
class gbooks():
googleapikey=""
def search(self, value):
params = {"q":value, 'key':self.googleapikey}
r = requests.get(url="https://www.googleapis.com/books/v1/volumes", params=params)
rj = r.json()
j = rj['items'][1]['volumeInfo']['publishedDate'][:4]
return print(j)
bk = gbooks()
bk.search("Harry Potter")