def book_detail(isbn): has_in_gifts = False has_in_wishes = False # 曲书记的详情数据 yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) book = BookViewModel(yushu_book.first) if current_user.is_authenticated: if Gift.query.filter_by(uid=current_user.id, isbn=isbn, launched=False).first(): has_in_gifts = True if Wish.query.filter_by(uid=current_user.id, isbn=isbn, launched=False).first(): has_in_wishes = True trade_gifts = Gift.query.filter_by(isbn=isbn, launched=False).all() trade_wishes = Wish.query.filter_by(isbn=isbn, launched=False).all() trade_wishes_model = TradeInfo(trade_wishes) trade_gifts_model = TradeInfo(trade_gifts) return render_template('book_detail.html', book=book, wishes=trade_wishes_model, gifts=trade_gifts_model, has_in_wishes=has_in_wishes, has_in_gifts=has_in_gifts)
def can_save_to_list(self, isbn): if is_isbn_or_key(isbn) != 'isbn': return False yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) if not yushu_book.first: return False # 不允许一个用户同时赠送多本相同的图书 # 一个用户不可能同时是赠送者和索要者 # 既不在心愿清单也不再赠送清单才能添加 gifting = Gift.query.filter_by(uid=self.id, isbn=isbn, launched=False).first() wishing = Wish.query.filter_by(uid=self.id, isbn=isbn, launched=False).first() if not gifting and not wishing: return True else: return False
def book_detail(isbn): # 取出每本书的详情 yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) book = BookViewModel(yushu_book.first) # 三种情况的判断 has_in_gifts = current_user.is_authenticated and current_user.has_in_gifts(isbn) has_in_wishes = current_user.is_authenticated and current_user.has_in_wishs(isbn) # 赠书人列表和索要人列表 trade_gifts = Gift.query.filter_by(isbn=isbn).all() trade_wishs = Wish.query.filter_by(isbn=isbn).all() trade_wishs_model = TradeInfo(trade_wishs) trade_gifts_model = TradeInfo(trade_gifts) return render_template("book_detail.html", book=book, wishes=trade_wishs_model, gifts=trade_gifts_model, has_in_wishes=has_in_wishes, has_in_gifts=has_in_gifts)
def search(): """ :param q: 关键字还是isbn :param page: 分页相关 :return: """ # Request:HTTP 请求相关信息,查询参数,POST参数,remote_ip # Response: # q ,page = request.args['q'],request.args['page'] # q和page合法校验。q:至少有一个字符,长度限制,page :正整数,一个最大值 # 验证层,参数校验 form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data.strip() page = form.page.data # 没有传递page,会获取到默认值1 isbn_or_key = is_isbn_or_key(q) yushu_book = YuShuBook() if isbn_or_key == 'isbn': # 第一次的亲密接触api:http://127.0.0.1:81/book/search/9787501524044/1 # 第一次的亲密接触api:http://127.0.0.1:81/book/search?q=9787501524044&page=1 # 如果没有导入,快捷导入:alt+enter yushu_book.search_by_isbn(q) # ret = YuShuBook.search_by_isbn(q) # result = BookViewModel.package_single(ret,q) else: yushu_book.search_by_keyword(q, page) # ret = YuShuBook.search_by_keyword(q,page) # result = BookViewModel.package_collection(ret,q) books.fill(yushu_book, q) # 主要是这种返回的思路,带上响应头 # return json.dumps(result,ensure_ascii=False),200,{'content-type':'application/json'}) # API:数据用json格式返回给客户端 return json.dumps(books, default=lambda o: o.__dict__) # 把不能序列化的类,转换为可以序列化的 # return jsonify(books) return jsonify(form.errors)
def can_save_to_list(self, isbn): """ 判断可以将书籍加入心愿清单 1.如果isbn编号不符合规则,不允许添加 2.如果isbn编号对应的书籍不存在,不允许添加 3.同一个用户,不能同时赠送同一本书籍 4.一个用户对于一本书不能既是赠书者,又是索要者 5.3和4合并成一条,就是一本书必须即不在心愿清单又不在赠书列表里才可以添加 :param isbn: :return: """ if not is_isbn_or_key(isbn): return False yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) if not yushu_book.first: return False gifting = Gift.query.filter_by(uid=self.id, isbn=isbn, launched=False).first() wishing = Wish.query.filter_by(uid=self.id, isbn=isbn, launched=False).first() return not wishing and not gifting
def search(): """ http://localhost:8088/book/search/?q=红楼梦&page=1 """ form = SearchForm(request.args) books = BookCollection() if form.validate(): # 获取参数q的值 q = form.q.data.strip() # 获取参数page的值 page = form.page.data isbn_or_key = is_isbn_or_key(q) yushu_book = YuShuBook() # Messaging Flash if isbn_or_key == 'isbn': yushu_book.search_by_isbn(q) # result = YuShuBook.search_by_isbn(q) # result = BookViewModel.package_single(result, q) else: yushu_book.search_by_keyword(q, page) # result = YuShuBook.search_by_keyword(q, page) # result = BookViewModel.package_collection(result, q) books.fill(yushu_book, q) # 这里直接返回的result是一个字典,用json.dumps()序列化这个字典转变为json格式,并指定状态码和content-type # return json.dumps(result), 200, {"content-type": "application/json"} # return jsonify(books.__dict__) # 用default参数传递一个函数序列化对象 # return json.dumps(books, default=lambda o: o.__dict__), 200, {"content-type": "application/json"} else: # return jsonify({'msg': '参数校验失败'}) # 使用form的errors属性返回错误信息 # return jsonify(form.errors) # 使用消息闪现返回错误提示 flash('搜索的关键字不符合要求,请重新输入关键字') return render_template('search_result.html', books=books)
def can_save_to_list(self, isbn): if is_isbn_or_key(isbn) != 'isbn': return False yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) if not yushu_book.first: return False # 不允许用户同时赠送多本相同的书 # 一个用户不能同时成为赠送这和索要者 # 书既不在赠送清单,也不在心愿清单才能添加 gifting = Gift.query.filter_by(uid=self.id, isbn=isbn, launched=False).first() if gifting: temp = Gift.query.filter_by( uid=self.id, isbn=isbn, launched=False, status=current_app.config['BOOK_STATUS_DELETE']).first() if temp: gifting = False wising = Wish.query.filter_by(uid=self.id, isbn=isbn, launched=False).first() if wising: temp = Wish.query.filter_by( uid=self.id, isbn=isbn, launched=False, status=current_app.config['BOOK_STATUS_DELETE']).first() if temp: wising = False if not gifting and not wising: return True else: return False
def book_detail(isbn): #初始变量 图书不在 赠送礼物清单 也不在 索要心愿清单中 不可能即在礼物清单也在心愿清单 #查询 此图书在礼物清单中的用户 此图书在心愿清单中的用户 #当前用户 指定的isbn图书 即不在赠送礼物清单 也不在索要礼物心愿清单 has_in_gifts = False has_in_wishes = False # 查询指定isbn的图书 # 裁剪指定isbn返回的原始数据 为 想要的数据 yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) book = BookViewModel(yushu_book.first) # 当前用户有 指定isbn图书在 赠送礼物清单中 # 当前用户有 指定isbn图书在 索要礼物心愿清单中 if current_user.is_authenticated: if Gift.query.filter_by(uid=current_user.id, isbn=isbn, launched=False).first(): has_in_gifts = True if Wish.query.filter_by(uid=current_user.id, isbn=isbn, launched=False).first(): has_in_wishes = True # 指定isbn 所有赠送者(礼物清单)的 用户清单 # 指定isbn 所有索要者(心愿清单)的 用户清单 trade_gifts = Gift.query.filter_by(isbn=isbn, launched=False).all() trade_wishes = Wish.query.filter_by(isbn=isbn, launched=False).all() trade_wishes_model = TradeInfo(trade_wishes) trade_gifts_model = TradeInfo(trade_gifts) return render_template('book_detail.html', book=book, wishes=trade_wishes_model, gifts=trade_gifts_model, has_in_wishes=has_in_wishes, has_in_gifts=has_in_gifts)
def can_save_to_list(self, isbn): """ 是否能添加到赠送或心愿清单 :param isbn: :return: """ if is_isbn_or_key(isbn) != 'isbn': return False yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) if not yushu_book.first: return False # 既不在赠送清单,也不在心愿清单才能添加 gifting = Gift.query.filter_by(uid=self.id, isbn=isbn, launched=False).first() wishing = Wish.query.filter_by(uid=self.id, isbn=isbn, launched=False).first() if not gifting and not wishing: return True else: return False
def search(): """ q:关键字或者是ISBN page:分页信息 ?q=..&page=.. """ # q = request.args['q'] # page = request.args['page'] form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data.strip() page = form.page.data isbn_or_key = is_isbn_or_key(q) yushu_book = YuShuBook() if isbn_or_key == 'isbn': yushu_book.search_by_isbn(q) else: yushu_book.search_by_keyword(q, page) books.fill(yushu_book, q) else: flash('搜索的关键字不符合要求,请重新输入搜索关键字') return render_template('search_result.html', books=books, form=form)
def search(): form = SearchForm(request.args) if form.validate(): q = form.q.data.strip() page = form.page.data isbn_or_key = is_isbn_or_key(q) if isbn_or_key == 'isbn': result = YuShuBook.search_by_isbn(q) else: result = YuShuBook.search_by_keyword(q, page) return jsonify(result) else: # return jsonify({'msg': '参数校验失败'}) return jsonify(form.errors)
def search(): """ 搜索书籍路由 """ # 实例化自定义的SearchForm需要传入一个字典作为要校验的参数 books = BookCollection() form = SearchForm(request.args) if form.validate(): q = form.q.data.strip() page = form.page.data isbn_or_key = is_isbn_or_key(q) yushubook = YuShuBook() if isbn_or_key == 'isbn': yushubook.search_by_isbn(q) else: yushubook.search_by_keyword(q, page) books.fill(yushubook, q) # print(result) # return jsonify(result) else: flash("搜索的关键字不符合要求,请重新输入关键字") # return json.dumps(books, default=lambda o: o.__dict__) return render_template('search_result.html', books=books)
def can_save_to_list(self, isbn): # 先校验是否符合isbn规范 if is_isbn_or_key(isbn) != 'isbn': return False # 根据isbn查是否有对应书籍 yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) if not yushu_book.first: return False # 不允许同一用户同时赠送多本相同的图书 # 一个用户不可能同时成为赠送者和索要者 # 既不在赠书清单里, 也不在心愿清单里才能添加 gifting = Gift.query.filter_by(isbn=isbn, uid=self.id, launched=False).first() wishing = Wish.query.filter_by(isbn=isbn, uid=self.id, launched=False).first() if not gifting and not wishing: return True else: return False
def search(): form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data.strip() # 从form中取参数 page = form.page.data # 因为form中有默认值,若果没有传入page参数,则取默认值 isbn_or_key = is_isbn_or_key(q) yushu_book = YuShuBook() if isbn_or_key == 'isbn': yushu_book.search_by_isbn(q) else: yushu_book.search_by_keyword(q, page) books.fill(yushu_book, q) # return json.dumps(books, default=lambda o: o.__dict__) # else: flash("搜索的关键字不符合要求,请重新输入关键字") # return jsonify(form.errors) # 参数校验失败,form不报错 return render_template("search_result.html", books=books)
def search(): form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data.strip() page = form.page.data isbn_or_key = is_isbn_or_key(q) yushu_book = YuShuBook() if isbn_or_key == "isbn": yushu_book.search_by_isbn(q) else: yushu_book.search_by_keyword(q, page) books.fill(q, yushu_book) # return json.dumps(books, default= lambda book:book.__dict__) # json序列化,自定义default函数 else: # return jsonify(form.errors) flash("搜索的关键字不符合要求,请重新输入") return render_template("search_result.html", books=books)
def search(): form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data.strip() page = form.page.data isbn_or_key = is_isbn_or_key(q) yushu_book = YuShuBook() if isbn_or_key == 'isbn': yushu_book.search_by_isbn(q) # result = YuShuBook.search_by_isbn(q) # result = BookViewModel.package_single(q, result) else: yushu_book.search_by_keyword(q, page) # result = YuShuBook.search_by_keyword(q, page) # result = BookViewModel.package_collection(q, result) books.fill(yushu_book, q) return json.dumps(books, default=lambda o: o.__dict__) else: return jsonify(form.errors)
def search(): """ 搜索书籍路由 """ form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data.strip() isbn_or_key = is_isbn_or_key(q) yushu_book = YuShuBook() if isbn_or_key == 'isbn': yushu_book.search_by_isbn(q) else: page = form.page.data yushu_book.search_by_key(q, page) books.fill(yushu_book, q) else: flash("搜索的关键字不符合要求,请重新输入关键字") return render_template("search_result.html", books=books)
def book_detail(isbn): has_in_gifts =False has_in_wishs = False #取数据详情数据 yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) book = BookViewModel(yushu_book.first) if current_user.is_authenticated: #用户必须登录,赠送和心愿清单处理,is_..=True是登录状态 if Gift.query.filter_by(uid=current_user.id, isbn=isbn, launched=False).first(): has_in_gifts = True if Wish.query.filter_by(uid=current_user.id, isbn=isbn, launched=False).first(): has_in_wishs = True trade_gifts = Gift.query.filter_by(isbn=isbn, launched=False).all() trade_wishs = Wish.query.filter_by(isbn=isbn, launched=False).all() trade_wishs_model = TradeInfo(trade_wishs) trade_gifts_model = TradeInfo(trade_gifts) return render_template('book_detail.html', book=book, wishes=trade_wishs_model,gifts=trade_gifts_model, has_in_gifts=has_in_gifts, has_in_wishs=has_in_wishs)
def search(): """ 书籍检索 不缓存,缓存的意义很小,反而会占用内存 """ form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data.strip() page = form.page.data isbn_or_key = is_isbn_or_key(q) yushu_book = YuShuBook() if isbn_or_key == 'isbn': yushu_book.search_by_isbn(q) else: yushu_book.search_by_keyword(q, page) books.fill(yushu_book, q) # return json.dumps(books, default=lambda o: o.__dict__) # return jsonify(books.__dict__) else: flash('搜索的关键字不符合要求,请重新输入关键字') # return jsonify({'msg': '搜索的关键字不符合要求,请重新输入关键字'}) return render_template('search_result.html', books=books)
def book_detail(isbn): has_in_gifts = False # 是否在赠送清单 has_in_wishes = False # 是否在心愿清单 yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) book = BookViewModel(yushu_book.first_book) if current_user.is_authenticated: if Gift.query.filter_by(uid=current_user.id, isbn=isbn, launched=False).first(): has_in_gifts = True if Wish.query.filter_by(uid=current_user.id, isbn=isbn, launched=False).first(): has_in_wishes = True gifts = Gift.query.filter_by(isbn=isbn, launched=False).all() wishes = Wish.query.filter_by(isbn=isbn, launched=False).all() trade_gifts = TradeInfo(gifts) trade_wishes = TradeInfo(wishes) return render_template('book_detail.html', book=book, wishes=trade_wishes, gifts=trade_gifts, has_in_gifts=has_in_gifts, has_in_wishes=has_in_wishes)
def book_detail(isbn): has_in_gifts=False #当前用户是否是赠送者 has_in_wishes=False #当前用户是否是索求者 #取书籍详情数据 yushu_book=YuShuBook() yushu_book.search_by_isbn(isbn) book=BookViewModel(yushu_book.first) if current_user.is_authenticated: if Gift.query.filter_by(uid=current_user.id,isbn=isbn, launched=False).first():#如果能查到,说明当前用户是赠送者 has_in_gifts=True if Wish.query.filter_by(uid=current_user.id,isbn=isbn, launched=False).first():#如果能查到,说明当前用户是索求者 has_in_wishes=True trade_gifts=Gift.query.filter_by(isbn=isbn,launched=False).all() #查询所有赠送人的清单 trade_wishes=Wish.query.filter_by(isbn=isbn,launched=False).all() #查询所有想要书的人的清单 trade_wishes_model=TradeInfo(trade_wishes) #将从数据库提取出来的数据结构变形成可供页面识别的数据结构 trade_gifts_model=TradeInfo(trade_gifts) return render_template('book_detail.html',book=book,wishes=trade_wishes_model, gifts=trade_gifts_model,has_in_gifts=has_in_gifts,has_in_wishes=has_in_wishes)
def can_save_to_list(self, isbn): """ 功能:验证用户的赠送此书,加入心愿清单传入数据是否有效 第一步:验证isbn是否符合isbn规范 第二步:验证根据isbn是否能查到书籍 第三步:赠送或想要的这本书,不能已经存在于gift或者wish表中 :param isbn: 书籍的isbn :return: True:标识isbn符合规范;False:表示isbn不符合规范 """ if is_key_or_isbn(isbn) != 'isbn': return False yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) if not yushu_book.first: return False gifting = Gift.query.filter_by(uid=self.id, isbn=isbn, launched=False).first() wishing = Wish.query.filter_by(uid=self.id, isbn=isbn, launched=False).first() if not gifting and not wishing: return True else: return False
def search(): """ q:普通关键字,isbn page(start,count) """ form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data.strip() page = form.page.data isbn_or_key = is_isbn_or_key(q) yushu_book = YuShuBook() if isbn_or_key == 'isbn': yushu_book.search_by_isbn(q) else: yushu_book.search_by_keyword(q, page) books.fill(yushu_book, q) else: flash('搜索的官架子不符合要求,请重新输入') return render_template('search_result.html', books=books, form=form)
def book_detail(isbn): """ 显示书籍的详情数据 has_in_gifts、has_in_wishes 在礼物清单、在心愿清单中 默认情况(未登录) 取书籍详情数据并将其渲染到模板中 :param isbn: :return: """ has_in_gifts = False has_in_wishes = False # 取书籍详情数据 yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) book = BookViewModel(yushu_book.first) # 登录后,判断是赠书者还是心愿者 if current_user.is_authenticated: if Gift.query.filter_by(uid=current_user.id, isbn=isbn, launched=False).first(): has_in_gifts = True if Wish.query.filter_by(uid=current_user.id, isbn=isbn, launched=False).first(): has_in_wishes = True trade_gifts = Gift.query.filter_by(isbn=isbn, launched=False).all() trade_wishes = Wish.query.filter_by(isbn=isbn, launched=False).all() trade_wishes_model = TradeInfo(trade_wishes) trade_gifts_model = TradeInfo(trade_gifts) return render_template('book_detail.html', book=book, wishes=trade_wishes_model, gifts=trade_gifts_model, has_in_gifts=has_in_gifts, has_in_wishes=has_in_wishes)
def book_detail(isbn): """ 1. 当书籍既不在心愿清单也不在礼物清单时,显示礼物清单 2. 当书籍在心愿清单时,显示礼物清单 3. 当书籍在礼物清单时,显示心愿清单 4. 一本书要防止即在礼物清单,又在赠送清单,这种情况是不符合逻辑的 这个视图函数不可以直接用cache缓存,因为不同的用户看到的视图不一样 优化是一个逐步迭代的过程,建议在优化的初期,只缓存那些和用户无关的“公共数据" """ has_in_gifts = False has_in_wishes = False # isbn_or_key = is_isbn_or_key(isbn) # if isbn_or_key == 'isbn': # 获取图书信息 yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) if current_user.is_authenticated: # 如果未登录,current_user将是一个匿名用户对象 if Gift.query.filter_by(uid=current_user.id, isbn=isbn, launched=False).first(): has_in_gifts = True if Wish.query.filter_by(uid=current_user.id, isbn=isbn, launched=False).first(): has_in_wishes = True book = BookViewModel(yushu_book.first) # if has_in_gifts: trade_wishes = Wish.query.filter_by(isbn=isbn, launched=False).all() trade_gifts = Gift.query.filter_by(isbn=isbn, launched=False).all() trade_wishes_model = TradeInfo(trade_wishes) trade_gifts_model = TradeInfo(trade_gifts) return render_template('book_detail.html', book=book, has_in_gifts=has_in_gifts, has_in_wishes=has_in_wishes, wishes=trade_wishes_model, gifts=trade_gifts_model)
def search(): """ 搜索 :param q: isbn或者普通关键字 :param page: 页码 :return: json """ # ?q=xxx&page=1 格式url获取参数 # q = request.args['q'] # page = request.args['page'] # 使用wtforms验证参数ps form = SearchForm(request.args) # 存储整理后的搜索结果 books = BookCollection() if form.validate(): q = form.q.data.strip() page = form.page.data # 判断搜索字段是isbn还是普通关键字 isbn_or_key = is_isbn_or_key(q) # 爬虫 获取搜索结果 yushu_book = YuShuBook() if isbn_or_key == 'isbn': yushu_book.search_by_isbn(q) else: yushu_book.search_by_keyword(q, page) # 整理搜索结果 books.fill(yushu_book, q) # 对象需要使用__dict__属性转换成字典才能json化,递归将对象转换成字典再json化 # return json.dumps(books, default=lambda o: o.__dict__) else: flash('搜索的关键字不符合要求,请重新输入关键字') # return jsonify(form.errors) return render_template('search_result.html', books=books)
def can_save_to_list(self, isbn): if is_isbn_or_key(isbn) != 'isbn': return False yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) if not yushu_book.first: return False #不允许一个用户同时赠送多本相同的图书 #一个用户不可能同时成为赠送者或者索要者 #当前isbn图书编号 已经存在于用户的赠送清单中 并且还没有赠送出去 (不允许同时赠送多本图书 [未赠送出去]) gifting = Gift.query.filter_by(uid=self.id, isbn=isbn, launched=False).first() #当前isbn图书编号 是否存在于用户的心愿清单里 wishing = Wish.query.filter_by(uid=self.id, isbn=isbn, launched=False).first() #即不在赠送清单 也不在心愿清单中 才能添加 if not gifting and not wishing: return True else: return False
def search(): """ :param q: 普通关键字isbn :param page: 查询页数 :return: """ form = SearchForm(request.args) books = BookCollection() if form.validate(): q, page = form.q.data.strip(), form.page.data # 判断是否是isbn搜索 isbn_or_key = is_isbn_or_key(q) yushu_book = YuShuBook() if isbn_or_key == 'isbn': yushu_book.search_by_isbn(q) else: yushu_book.search_by_keyword(q, page=page) books.fill(yushu_book, q) else: flash('根据关键字搜索不到,请重新输入') return render_template('search_result.html', books=books)
def book_detail(isbn): ''' 书籍详情页展示: 1 包含书籍的相关信息 2 所有请求书籍人信息列表 3 所有赠送者信息列表 :param isbn: :return: ''' has_in_gifts = False has_in_wishes = False ''' 对应数据的详情信息 ''' yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) book = BookViewModel(yushu_book.first) if current_user.is_authenticated: if Gift.query.filter_by(uid=current_user.id,isbn=isbn,launched=False).first(): has_in_gifts = True if Wish.query.filter_by(uid=current_user.id, isbn=isbn, launched=False).first(): has_in_wishes = True ''' 所有赠送者清单 所有索要者清单 ''' trade_gifts = Gift.query.filter_by(isbn=isbn,launched=False).all() trade_wishes = Wish.query.filter_by(isbn=isbn,launched=False).all() ''' 展示用户信息,时间 ''' trade_wishes_model = TradeInfo(trade_wishes) trade_gifts_model = TradeInfo(trade_gifts) return render_template('book_detail.html', book=book, wishes=trade_wishes_model, gifts=trade_gifts_model,has_in_gifts=has_in_gifts,has_in_wishes=has_in_wishes)
def __is_form_accorded(q, page): """ verify the request parameters' correctness :param q: :param page: :return: """ # isbn13 13个0到9的数字组成 # isbn10 10个0到9的数字组成,含有一些'-' isbn_or_key = is_isbn_or_key(q) books = BookCollection() yushu_book = YuShuBook() if 'isbn' == isbn_or_key: yushu_book.search_by_isbn(q) else: yushu_book.search_by_keyword(q, page) books.fill(yushu_book, q) # 返回的数据必须是字符串形式,而json格式的数据在Python中是dict形式 # 因此,必须使用json的dumps函数对数据进行序列化 # return json.dumps(books, default=lambda val: val.__dict__) # return json.dumps(result), 200, {'content-type': 'application/json'} return books
def search(): """ :q: search key word :page: how many results :return: """ form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data.strip() page = form.page.data isbn_or_key = is_isbn_or_key(q) yushu_book = YuShuBook() if isbn_or_key == 'isbn': yushu_book.search_by_isbn(q) else: yushu_book.search_by_keyword(q, page) books.fill(yushu_book, q) else: flash('Format error, please input again.') return render_template('search_result.html', books=books)
def search(): """ q:代表普通关键字和isbn page:分页 :return: """ # 这里的request必须是由视图函数或者HTTP请求触发,才会成为想要的不可变的字典 # 验证层,使用WTForms验证请求信息 form = SearchForm(request.args) books = BookCollection() # 调用form的validate()才会开始校验 if form.validate(): # 获取q,pages的值,也可以通过request.args[''] q = form.q.data.strip() page = form.pages.data isbn_or_key = is_isbn_or_key(q) yushu_book = YuShuBook() if isbn_or_key == 'isbn': yushu_book.search_by_isbn(q) else: yushu_book.search_by_keyword(q, page) books.fill(yushu_book, q) # 这里若是直接返回books会报错 return(books),因为python不可以序列化一个对象,但是可以序列化字典,所以想到了将对象中的内置__dict__ # 返回,但是又有可能对象中还有对象,所以采用函数式编程思想,用lambda将一个不能序列化的对象转化成可以序列化得字典 # return json.dumps(books, default=lambda o: o.__dict__) # result是json格式,需要序列化和添加头信息,让客户端解析为json格式,flask提供了一个更为简单的方式,如: # return json.dumps(result),200,{'content-type':'application/json'} else: flash("您搜索的关键字不符合要求,请重新输入!") # 将数据渲染至模板 return render_template('search_result.html', books=books)
def book_detail(isbn): ''' 1. 当书籍既不在心愿清单也不在礼物清单时,显示礼物清单 2. 当书籍在心愿清单时,显示礼物清单 3. 当书籍在礼物清单时,显示心愿清单 4. 一本书要防止即在礼物清单,又在赠送清单,这种情况是不符合逻辑的 ''' has_in_gifts = False has_in_wishes = False # 取书籍详情数据 yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) book = BookSingleModel(yushu_book.first_book) if current_user.is_authenticated: if Gift.query.filter_by(uid=current_user.id, isbn=isbn, launched=False).first(): has_in_gifts = True if Wish.query.filter_by(uid=current_user.id, isbn=isbn, launched=False).first(): has_in_wishes = True trade_gifts = Gift.query.filter_by(isbn=isbn, launched=False).all() trade_wishes = Wish.query.filter_by(isbn=isbn, launched=False).all() trade_gifts_model = TradeInfo(trade_gifts) trade_wishes_model = TradeInfo(trade_wishes) return render_template('book_detail.html', book=book, wishes=trade_wishes_model, gifts=trade_gifts_model, has_in_gifts=has_in_gifts, has_in_wishes=has_in_wishes)
def search(): # 验证层,对参数进行校验 form = SearchForm(request.args) if form.validate(): q = form.q.data.replace(' ', '') page = form.page.data isbn_or_key = is_isbn_or_key(q) if isbn_or_key == 'isbn': result = YuShuBook.search_by_isbn(q) else: result = YuShuBook.search_by_keyword(q, page) return jsonify(result) # flask自带的返回json else: return jsonify(form.errors)
def search(): """ q:普通搜索 or isbn搜索 page ?q=金庸&page=1 :return: """ form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data.strip() page = form.page.data isbn_or_key = is_isbn_or_key(q) yushu_book = YuShuBook() if isbn_or_key == 'isbn': yushu_book.search_by_isbn(q) else: yushu_book.search_by_keyword(q, page) books.fill(yushu_book, q) else: flash('搜索的关键字不符合要求,请重新输入关键字') return render_template('search_result.html', books=books)
def book(self): yushu_book = YuShuBook() yushu_book.search_by_isbn(self.isbn) return yushu_book.first