def postbox(request): if request.method == "POST": onedrive_data = json.loads(request.body) if onedrive_data['name'][-5] == '.': file_name, file_format = onedrive_data['name'][:-5], onedrive_data[ 'name'][-4:] elif onedrive_data['name'][-4] == '.': file_name, file_format = onedrive_data['name'][:-4], onedrive_data[ 'name'][-3:] else: h = HttpResponse('后缀名不合法') h.status = 404 return h if (file_format != 'epub') and (file_format != 'mobi') and ( file_format != 'azw3') and (file_format != 'pdf') and (file_format != 'kfx'): h = HttpResponse('后缀名不合法') h.status = 404 return h if Book.objects.filter(file_name=file_name): #如果存在这本书 b = Book.objects.get(file_name=file_name) b.save_url(onedrive_data['url'], file_format, onedrive_data['size']) b.save() else: #如果不存在这本书 douban_data = get_book_data(file_name) pprint(douban_data) b = Book() b.date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) if douban_data: b.file_name = file_name b.title = douban_data['title'] if douban_data['subtitle']: b.subtitle = douban_data['subtitle'] if douban_data['alt_title']: b.english_title = douban_data['alt_title'] b.save() #为添加作者准备 author = douban_data.get('author') if author: #如果作者不为空 if len(author) == 1: a_inf = douban_data['author_intro'] else: a_inf = douban_data['author_intro'].split('\n')[1::2] al = [] if len(a_inf) == len(douban_data['author']): a_inf = a_inf else: a_inf = [ '不详' for i in range(len(douban_data['author'])) ] for i in range(len(douban_data['author'])): d = {} d['name'] = douban_data['author'][i] d['information'] = a_inf[i] al.append(d) for l in al: a = None if not Author.objects.filter(name=l['name']): #添加作者 a = Author() a.name = l['name'] a.information = l['information'] a.save() a.book.add(b) else: a = Author.objects.get(name=l['name']) a.book.add(b) b.author.add(a) if douban_data.get('price'): b.price = douban_data['price'] b.cover = 'https://images.weserv.nl/?url=' + douban_data[ 'images']['small'][8:] b.large_cover = 'https://images.weserv.nl/?url=' + douban_data[ 'images']['large'][8:] b.summary = douban_data['summary'] b.catalog = douban_data['catalog'] if not Publisher.objects.filter( name=douban_data['publisher']): #添加出版社 p = Publisher(name=douban_data['publisher']) p.save() else: p = Publisher.objects.get(name=douban_data['publisher']) b.publisher.add(p) p.book.add(b) b.save() b.douban_id = douban_data['id'] if douban_data['isbn10']: b.isbn10 = douban_data['isbn10'] if douban_data['isbn13']: b.isbn13 = douban_data['isbn13'] if douban_data['pages']: b.pages = douban_data['pages'] if douban_data.get('tags'): b.save() for d_t in douban_data['tags']: t = Tag() t.name = d_t['name'] t.title = d_t['title'] t.save() t.book.add(b) b.tags.add(t) s = douban_data.get('series') if s and type(s) == type({}): b.save() s = Series() s.name = douban_data.get('series')['title'] s.save() s.book.add(b) b.series.add(s) tr = douban_data.get('translator') pprint(tr) if tr and type(tr) == type([]): b.save() for tr in tr: if not Translator.objects.filter(name=tr): t = Translator() t.name = tr t.save() t.book.add(b) b.translator.add(t) else: b.translator.add(Translator.objects.get(name=tr)) b.save_url(onedrive_data['url'], file_format, onedrive_data['size']) else: b.file_name = b.title = file_name b.save_url(onedrive_data['url'], file_format, onedrive_data['size']) b.save() return render(request, 'book/404.html') else: return render(request, 'book/404.html', status=404)