def search(): """ q :普通关键字 isbn page ?q=金庸&page=1 """ 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 jsonify(books) # return json.dumps(books, default=lambda o: o.__dict__) else: # return jsonify(form.errors) flash('被搜索的关键字不符合要示,请重新输入关键字') return render_template('search_result.html', books=books)
def search(): """ q:普通关键字 isbn page """ # Request Response # HTTP 的请求信息 # 查询参数 POST参数 remote ip # q = request.args['q'] # #至少1个字符,长度限制 # page = request.args['page'] #不可变的dict ; 转换为可变:a=request.args.to_dict() # 正整数,长度限制 # 验证层 form = SearchForm(request.args) if form.validate(): # 验证通过 q = form.q.data.strip() #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) # return json.dumps(result),200,{'content-type':'application/json'} else: return jsonify(form.errors)
def search(): # isbn isbn13 13个0-9的数字组成 # q = request.args['q'] # page = request.args['page'] # 不可变字典 # a = request.args.to_dict() # 不可变字典转换为可变字典 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) # dict 序列化 # API # return json.dumps(result),200,{'content-type':'application/json'} # jsonify() 序列化字典 # return json.dumps(books, default=lambda o: o.__dict__) else: flash("搜索的关键字不符合要求,请重新输入关键字") # 消息闪现 # return jsonify(form.errors) return render_template('search_result.html', books=books, form=form)
def search(): """ http://127.0.0.1:5000/book/search/9787501524044/1 http://127.0.0.1:5000/book/search?q=9787501524044&page=1 http://127.0.0.1:5000/book/search?q=红楼梦 """ 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.full(yushu_book, q) # TypeError: Object of type BookCollection is not JSON serializable # return jsonify(books) # return json.dumps(books, default=lambda o: o.__dict__), 200, {"content-type": "application/json"} else: # return jsonify(form.errors) flash(message="搜索的关键字不符合要求,请重新输入关键字") return render_template("search_result.html", books=books)
def search(): """ q: 普通关键字 isbn page ?q=金庸&page=1 """ # Request Response # HTTP 的请求信息 查询参数 POST参数 remote ip form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data 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(result, q) else: yushu_book.search_by_keyword(q, page) # result = YuShuBook.search_by_keyword(q, page) # result = BookViewModel.package_collection(result, q) # return jsonify(result) # return json.dumps(result), 200, {'content-type': 'application/json'} books.fill(yushu_book, q) # return json.dumps(books, default=lambda o: o.__dict__) else: flash('搜索的关键字不符合要求,请重新输入关键字!') return render_template('search_result.html', books=books)
def search(): """ :param q: 普通关键字 ISBN :param page:普通关键字下 ?q=金庸&page=1 :return: """ # # app.add_url_rule("url", view_func=, endpoint=) # q = request.args["q"] # # 至少有一个字符,长度限制 # page = request.args["page"] # # 正整数,也要有一个最大值限制 form = SearchForm(request.args) books = BookCollection() if form.validate(): # a = request.args.to_dict() 把结果由不可变字典换成普通字典 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(): ''' q:普通子搜索 isbn page isbn13 与 isbn10 是有短横线_ ''' 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.__dict__, default=lambda o: o.__dict__) else: flash('搜索的关键字不符合要求,请重新输入关键字') # return jsonify(form.errors) return render_template('search_result.html', books=books)
def search(): ''' :param q: 普通关键字 isbn :param page: :return: ''' # q = request.args['q'] # page = request.args['page'] form = SearchForm(request.args) books = BookCollection() #form当中有errors的dict类型,form.errors.q if form.validate(): #strip去除前后空格 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: # return jsonify(form.errors) flash('搜索的关键字不符合要求,请重新输入关键字') return render_template('search_result.html', books=books)
def search(): """ :param q: 关键字,可以是普通关键字或者ISBN码 :param page: 分页相关参数 :return: """ # a = request.args.to_dict() 把不可变字典转化成可变字典 form = SearchForm(request.args) # 类中找不到__init__函数,则会去父类中找 books = BookCollenction() 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.wrap_collection(yushu_book.record_dict, q) # return json.dumps(books, default=lambda o: getattr(o, '__dict__', None)) # return的是ViewModel else: flash('搜索的关键字不符合要求,请重新输入') # return jsonify(form.errors) return render_template('search_result.html', books=books)
def search(): """ 视图函数,根据关键字搜索书籍信息 :return: json序列化数据 """ # 信息验证 form = SearchForm(request.args) # 实例化book 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 search(): ''' doubanapi: http://t.yushu.im/v2/book/search?q={}&count={}&start={} http://api.douban.com/v2/book/isbn/{isbn} api: http://t.yushu.im/v2/book/search?q={}&count={}&start={} http://t.yushu.im/v2/book/isbn/{isbn} q:普通关键字/isbn page isbn:isbn13 13个0到9的数字组成 (新) isbn10 10个0到9数字组成,含有一些'-' (旧) ''' form=SearchForm(request.args) books=BookCollection() if form.validate(): #SearchForm验证通过会返回True,否则返回False 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__,ensure_ascii=False) #递归books下的每一个实例属性,都将其转化为dict形式 # return jsonify(books.__dict__) #(这样不可以,因为BookCollection的books属性还是对象形式存在。)将实例属性转化为字典 else: flash('搜索的关键字不符合要求,请重新输入关键字') return render_template('search_result.html', books=books)
def search(): ''' q:普通关键字 isbn page ''' #验证层 form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data page = form.page.data isbn_or_key = is_isbn_or_key(q) rec_book = RecBook() if isbn_or_key == 'isbn': f = rec_book.search_by_isbn(q) else: f = rec_book.search_by_keyword(q, page) books.fill(rec_book, q, f) if f == 'api': save_book(books.books) #API , dict 序列化 else: flash('搜索的关键字不符合要求,请重新输入关键字') return render_template('search_result.html', books=books)
def book(): q = request.args['q'] form = SearchForm(request.args) if form.validate(): q = form.q.data.strip() page = form.page.data perPage = current_app.config['PER_PAGE'] return str(perPage) + str(page) + str(q) return False
def search(): # 判断使用的ibsn还是word_key # isbn_or_key = is_isbn_or_key(q) # ---------使用 if else 非三元的方式实现------------ # if isbn_or_key == 'isbn': # return YuShuBook.search_by_isbn(q) # else: # return YuShuBook.serach_by_keyword(q) # ----------------------------------------------- # -----------使用python自带的json实现返回json格式与定义header头上的content-type的内容------------------------------ # return json.dumps(YuShuBook.search_by_isbn(q) if isbn_or_key == 'isbn' else YuShuBook.serach_by_keyword(q)) \ # , 200, {'content-type': 'application/json'} # ---------------------------------------------------------------------------------------------------------- # -------------flask框架中的jsonify实现对json的封装、包括 header 头上的指定 'content-type': 'application/json' 与状态码的定义 # ------------页面验证器-------------- form = SearchForm(request.args) # ---------------------------------- # if form.validate(): # q = form.q.data.strip() # page = form.page.data # isbn_or_key = is_isbn_or_key(q) # return jsonify(YuShuBook.search_by_isbn(q) if isbn_or_key == 'isbn' else YuShuBook.serach_by_keyword(q,page)) # return jsonify({'Message': '找不到当前数据'}), 404 # ---------------------------------------------------------------------------------------------------------- bookbusiness = YuShuBook() bookview = BookView() if form.validate(): q = form.q.data.strip() page = form.page.data helper = Helper(q) isbn_or_key = helper.is_isbn_or_key() if isbn_or_key == 'isbn': bookbusiness.search_by_isbn(q) else: bookbusiness.serach_by_keyword(q, page) bookview.fill(q, bookbusiness) # ---------------------------------------------------------- # default=lambda o: o.__dict__ 是解决复杂对象序列化问题、 # 当在对象中有自定义对象的时候json.dumps提供default来处理dumps无法处理的序列化 # 因为要转换成json 1)源数据 -转换成-> dict 2) json.dumps -转换成-> json格式 # bookview -| # key:String # total:Int # books:List[Book] <- bookview.__dict__ 将无法序列化成字典,此时 需要需要手动将Book对象转换成字典,这个时候就会去执行default函数了 # ---------------------------------------------------------- print(f'dict{bookview.__dict__}') # return json.dumps(bookview.__dict__, default=lambda o: o.__dict__), {'content-type': 'application/json'} else: # return jsonify({'Message': '找不到当前数据'}), 404 flash('找不到当前数据') return render_template("search_result.html", books=bookview)
def book_search(): form = SearchForm(request.args) if form.validate(): data = search_douban_books(form.data) print(data, 3333) data = BookViewModel.package_collection(data, form.q.data) else: data = form.errors flash(data) # return jsonify(data) # return render_template('search_result.html', books=data) return template_or_json(request, 'search_result.html', data, books=data)
def search3(): """ :param q: :param page: :return: """ #校验 form = SearchForm(request.args) #是否通过 if form.validate(): q = form.q.data.strip() result = YuShuBook.search_by_isbn(q) return jsonify(result) else: return jsonify(form.errors)
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: 普通的关键字 isbn page 页码 ?q=金庸&page=1 :return: ''' # Request Response # HTTP 的请求信息 # 查询参数 POST 参数 remote ip form = SearchForm(request.args) # http://0.0.0.0:5000/book/search?q=%E9%83%AD%E6%95%AC%E6%98%8E&page=2 http://0.0.0.0:5000/book/search?q=%E7%BA%A2%E6%A5%BC%E6%A2%A6&page=1 books = BookCollection() if form.validate(): # q = request.args['q'] # page = request.args['page'] # ip = request.remote_addr # print(q, page, ip) q = form.q.data.strip() # http://0.0.0.0:5000/book/search?q=9787501524044 page = form.page.data # http://0.0.0.0:5000/book/search?q=红楼梦 # a = request.args.to_dict() # 把不可变字典变成可变字典 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.pacage_single(result, q) else: yushu_book.search_by_keyword(q, page) # result = YuShuBook.search_by_keyword(q, page) # result = BookViewModel.package_collection(result, q) # return json.dumps(result), 200, {'content-type':'application/json'} # return jsonify(result) # __dict__ books.fill(yushu_book, q) # return json.dumps(books, default=lambda o: o.__dict__) # return jsonify(books.__dict__) else: flash('搜索的关键字不符合要求, 请重新输入关键字') # return jsonify(form.errors) 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) books.fill(yushu_book, q) return jsonify(books) else: return jsonify(form.errors)
def search(): # q = "9787101056365" form = SearchForm(request.args) books = YuShuBook() if form.validate(): q = form.q.data.strip() page = form.page.data isbn_or_key = is_isbn_or_key(q) if isbn_or_key == "key": books.search_by_keyword(q, page) if isbn_or_key == "isbn": books.search_by_isbn(q) # return json.dumps(result), 200, {"content-type": "application/json"} # return json.dumps(result, default=lambda o: o.__dict__) # return render_template("test.html", data={"a": "", "b": 2}) return render_template("search_result.html", books=books, form=form)
def search(): # request链接末端的?参数方式获取参数,request对象是由http请求触发的,所以必须放在视图函数中 form = SearchForm(request.args) if form.validate(): q = form.q.data.strip() # 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) # flask的jsonify,将信息(包括status code和headers)封装成json格式返回 return jsonify(result) else: return jsonify(form.errors)
def search(): form = SearchForm(request.args) result = BookViewModel.collection() if form.validate(): page = form.page.data query = form.q.data.strip() res = is_isbn_or_query(query) yushu_book = Yushubook() if res == "isbn": yushu_book.search_by_isbn(query) else: yushu_book.search_by_query(query, page) result = BookViewModel.collection(data=yushu_book, query=query) return render_template("search_result.html", books=result) flash("搜索关键字不符合要求,请重新输入") return render_template("search_result.html", books=result)
def search(): res = {} 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': res = Book.search_by_isbn(q) res = BookViewModel.package_single(res,q) if isbn_or_key == 'key': res = Book.search_by_keyword(q,page) res = BookViewModel.package_collection(res,q) return jsonify(res) else: return jsonify({'msg':'参数有误'})
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 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)