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) else: flash('搜索的关键字不符合要求,请重新输入关键字') # return jsonify(form.errors) return render_template('search_result.html', books=books, form=form)
def search(): """ q: isbn && 普通のキーワード page(start, count) 別の例: ?q=作家名&page=1 :return: """ # クライアントからのパラメータを制限かける # 長さの制限かける # 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) return json.dumps(books, default=lambda o: o.__dict__) else: return form.errors
def search(): # result1 = request.args['q'] # result2 = request.args['key'] # print(request.args.to_dict()) # print(result2) # print(result1) # response = make_response('hello world',200) # header = { # 'content-type': 'text/plain', # 'location': 'http://www.baidu.com' # } # response.header = header # return response # return 'hello world',302,header 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 json.dumps( books, default=lambda o:o.__dict__ ) ,200 ,{'content-type':'application/json'} return render_template("search_result.html", books=books, form=form)
def search(): """ q :普通关键字 (keyword) 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() # strip()除去q前后存在空格 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) books.fill(yushu_book, q) return json.dumps(books, default=lambda o: o.__dict__) else: flash('搜索的关键字不符合要求,请重新输入关键字') return render_template('search_result.html', books=books, form=form)
def search(): # q = request.args['q'] # page = request.args['page'] print(request.headers) form = SearchBook(request.args) books = BookCollection() if form.validate(): q = form.q.data page = form.page.data isbn_or_key = is_isbn_or_key(q) book = YuShuBook() if isbn_or_key == 'isbn': book.search_by_isbn(q) # res = YuShuBook.search_by_isbn(q) else: book.search_by_keyword(q, page) # res = b'str(res)'.decode('utf-8') # res = eval(res) books.fill(book, q) else: # return jsonify({'msg': '参数校验失败'}) flash('搜索错误') # return json.dumps(books, default=lambda o: o.__dict__) return render_template('search_result.html', books=books)
def search(): # q = request.args['q'] # page = request.args['page'] # a = request.args.to_dict() # 将不可边的字典 immutablemultidict 转化为可变字典 dict args = request.args form = SearchForm(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__) else: flash("搜索的关键字不符合要求,请重新输入关键字") # return jsonify(form.errors) return render_template("search_result.html", books=books, form=form)
def search(): """ :q keyword or isbn :page 分页 :return: """ form = SearchForm(request.args) books = BookCollectionViewModel() 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': # 面向过程 # result = yushu_book.search_by_isbn(q) # result = BookViewModel.package_single(result, q) yushu_book.search_by_isbn(q) else: yushu_book.search_by_keyword(q, page) books.full(yushu_book, q) # 对象进行序列化 # return json.dumps(books, default=lambda obj: obj.__dict__) # jsonify 序列化方法 # return jsonify(books) else: # return jsonify({"msg": "参数验证失败"}) # return jsonify(form.errors) flash('搜索的关键字不符合要求,请重新进行搜索') return render_template('search_result.html', books=books, form=form)
def search(): """ 图书检索视图 :param q: isbn 或者 关键字 :param page: 页数 :return: """ search_form = SearchForm(request.args) books = BookCollection() if search_form.validate(): q = search_form.q.data.strip() page = search_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) # json模块的default实现了将方法实现交给使用者 # return json.dumps(books, default=lambda o: o.__dict__) else: # return jsonify({'msg': 'noting..'}) flash("搜索的关键字不符合要求,请重新输入...") # return json.dumps(result), 200, {'content-type': 'application/json'} return render_template("search_result.html", books=books, form=search_form)
def search(): # q = request.args['q'] # 从Form中取值更好 # page = request.args['page'] # Immutable不可变字典, request 几乎包含所有 http 请求信息,可以解析问号 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__) # 函数式编程,权限交给调用方,比如 sorted filter else: # return jsonify(form.errors) flash('搜索的关键字不存在') return render_template('search_result.html', books=books)
def search(): ''' Request类实例化后用于?接参数 :param q:至少要有一个字符 :param page:正整数,要有最大值限制 :return: ''' # 验证层概念,参数校验 form = SearchForm(request.args) # form.validate校验参数,从验证层取数据避免没有默认值 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(): # request是flask提供的对象,使用request需要注意是否在视图函数的上下文中触发的 form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data.strip( ) # 这里通过form获取q,而不通过request.args['q']获取,是因为验证层可能会有默认值 page = form.page.data yushu_book = YuShuBook() # dict结构 if isbn_or_key(q) == 'key': # result = YuShuBook.search_by_keyword(q, page) yushu_book.search_by_keyword(q, page) else: # result = YuShuBook.search_by_isbn(q) yushu_book.search_by_isbn(q) books.fill(yushu_book, q) # viewmodel # return books, 200, {'content-type': 'application/json'} else: # 检验不通过的error这里是在form对象里,另外一般库是放在异常里抛出来的 # return jsonify(form.errors) # flash('没有找到搜索内容') # 对象序列化成字典,递归,对于对象里属性又是对象,用lambda表达式进行转换 # return json.dumps(books, default=lambda o: o.__dict__) return render_template('search_result.html', books=books)
def search(): ''' 搜索函数 :param: q:[普通关键字 isbn] page,放在request中通过args获取 :return: ''' ''' 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) '''return json.dumps(books,default=lambda obj:obj.__dict__,ensure_ascii=True)''' else: '''return jsonify(form.errors)''' flash('您输入的搜索关键字不符合要求,请重新输入') return render_template('search_result.html', books=books, form=form)
def search(): """ isbn13 由13个0到9数字组成 isbn10 10个0到9数字组成 含有一些' - ' """ # q = request.args['q'] # page = request.args['page'] form = SearchForm(request.args) books = BookCollection() # 若没有传入任何参数,form.validate()会返回false 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 = _BookViewModel.package_single(result, q) else: yushu_book.search_by_keyword(q, page) # result = _BookViewModel.package_collection(result, q) books.fill(yushu_book, q) # return json.dumps(result), 200, {'content-type':'application/json'} # return jsonify(result) 无法直接序列化对象 # return json.dumps(books, default=lambda o:o.__dict__) else: # return jsonify({'msg':'param verification failure, %s' % json.dumps(form.errors)}) # return jsonify(form.errors) flash('搜索的关键字不符合要求,请重新输入关键字') return render_template('search_result.html', books=books, form=form)
def search(): """ q:普通关键字 page:页码 ?q=金庸&page=1 :return: """ form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data.strip() page = form.page.data isbin_or_key = is_isbin_or_key(q) yushu_book = YuShuBook() if isbin_or_key == 'isbin': yushu_book.search_by_isbn(q) else: yushu_book.search_by_keyword(q, page) books.fill(yushu_book, q) return json.dump(books, default=lambda o: o.__dict__) else: return form
def search(): """ q:普通关键字, isbn (搜索类别) page:分页使用,默认为1 """ # 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 #从form中取值,避免没有传page值为空 wtf验证参数设置默认值为1 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.__dict__) # #books为一个对象,jsonify不能序列化一个对象,调用__dict__转成字典格式 ##假如books内嵌的一个类实例对象中又内嵌一个类实例对象,调用一次__dict__不能解决问题 #return json.dumps(books,default=lambda o: o.__dict__) #将处理后的dict数据转化成json数据 else: flash('搜索的关键字不符合要求,请重新输入关键字') return render_template('search_result.html', books=books)
def search(): # q = request.args['q'] # page = request.args['page'] args = request.args 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(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) # dict 序列化 # return json.dumps(books, default=lambda o: o.__dict__), 200, {'content-type': 'application/json', # 'Access-Control-Allow-Origin': '*'} # return jsonify(books.__dict__) # return json.dumps(result), 200, {'content-type': 'application/json', 'Access-Control-Allow-Origin': '*'} else: # return jsonify(form.errors) flash('未查找到符合要求的书籍!') return render_template('search_result.html', books=books)
def search(): """ q: 普通关键字 isbn 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) # result是一个dict 序列化为json字符串返回 # return json.dumps(books, default=lambda obj: obj.__dict__) # return json, dumps(result), 200, {'content-type':'application/json'} else: flash('搜索的关键字不符合要求,请重新输入关键字') return render_template('search_result.html', books=books)
def search(): ''' :param q: :param page: :return: ''' # print('haha:%s' % (request.args['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.fill(yushu_book, q) # 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(): """ 搜索接口 :param p: 关键字 isbn :param page: 页数 :return: 根据isbn或者关键字返回相应字段 """ form = SearchForm(request.args) books = BookCollection() if form.validate(): p = form.p.data.strip() page = form.page.data isbn_or_key = is_isbn_or_key(p) yushu_book = YuShuBook() if isbn_or_key == 'isbn': yushu_book.search_by_isbn(p) else: yushu_book.search_by_keyword(p, page) books.fill(yushu_book, p) return json.dumps(books, default=lambda o: o.__dict__) # return jsonify(books) else: return jsonify(form.errors)
def search(): print(request.args)# 获取参数值 # 验证传递过来的参数 form = SearchForm(request.args) books = BookCollection() if form.validate(): print('search()参数验证通过!') # 获取验证通过后的值,从验证器中取值 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) elif isbn_or_key == 'key': yushu_book.search_by_keyword(q, page) books.fill(yushu_book, q) # Flask提供的返回JSON的做法,return json.dumps(result),200,{'content-type':'application/json'}原生返回JSON数据的做法 # return jsonify(books.__dict__)# python不能直接序列化对象books # return json.dumps(books, default=lambda o:o.__dict__) # 通过匿名函数将不能序列化的对象序列化 else: flash('search()验证失败!') json.dumps(books, default=lambda o:o.__dict__) return render_template('search_result.html', books=books)
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) if isbn_or_key == 'isbn': yushu_book = YuShuBook() yushu_book.search_by_isbn(q) else: yushu_book = YuShuBook() yushu_book.search_by_keyword(q,page) books.fill(yushu_book,q) #dict序列化 API #return json.dumps(books,default=lambda o: o.__dict__) #return jsonify(books) else: flash('搜索的关键字不符合要求,请重新输入关键字') #return jsonify(form.errors) return render_template('search_result.html', books=books)
def search(): # q = request.args['q'] # /book/search?q=423423444&page=1 # page = request.args['page'] # request.args下面还包含许多其他信息,但是是不可变字典 # a = request.args.to_dict() 将其转为可变字典 form = SearchForm(request.args) books = BookCollection() 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) # return json.dumps(result), 200, {'content-type': 'appplication/json'} # 返回的result是一个字典,需要将其序列化,python无法直接序列化一个对象 # 所以return jsonify(books)时候,books里面含有对象,会报错解决办法如下,利用__dict__属性 # 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(): ''' q: 普通关键字 isbn page :return: ''' form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data.strip() # 最好从form里面取出来参数,因为如果没有传值的时候,form里面有设置默认值 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: YuShuBook.search_by_keyword(q, page) books.fill(yushu_book, q) # return jsonify(books) # json.dumps(books, default=lambda o: o.__dict__) else: flush('搜索的关键字不符合要求') # return jsonify(form .errors) return render_template('search_result.html', books=books)
def search(): # q = request.args['q'] #获取参数 # page = request.args['page'] form = SearchForm(request.args) books = BookCollection() #处理多数据 if form.validate(): q = form.q.data.strip() #获取form验证通过的参数 isbn_or_key = is_isbn_or_key(q) page = form.page.data yushu_book = YuShuBook() if isbn_or_key == 'isbn': yushu_book.search_by_isbn(q) # result = YuShuBook.search_by_isbn(q) if YuShuBook.search_by_isbn(q) else '' # result =BookViewModel.package_single(result, q) else: yushu_book.search_by_keyword(q, page) #老方法对应view_model中的伪类 # result = YuShuBook.search_by_keyword(q) # result = BookViewModel.package_collection(result, q) # return json.dumps(result),200,{'content-type': 'application/json'} books.fill(yushu_book, q) #这是一个对象,且不是普通的对象,所以不能用__dict__。它是的属性同样是一个对象。 # return json.dumps(books, default=lambda o: o.__dict__) #后面函数采用了递归的思想,如果属性为一个对象,则继续调用__dict__方法 # return jsonify(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.strip() page = form.page.data #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) books.fill(yushu_book, q) # return jsonify(result) # return jsonify(books.__dict__) else: flash('搜素的关键词无效') return render_template('search_result.html', books=books)
def search(): """ q:用户传递的参数 page:用户传递的页面 """ # 通过验证层判断参数是否合法 form = SearchForm(request.args) books = BookCollection() # 实例化修整的数据类 if form.validate(): # 取出验证后的值,并去除前后的值 q = form.q.data.strip() page = form.page.data # 判断用户传入的参数是否为isbn isbn_or_key = is_isbn_key(q) yushu_book = YuShuBook() # 实例化鱼书book if isbn_or_key == 'isbn': # 在pycharm中选择YuShuBook安住option+enter可以自动导入类 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) # return jsonify(books) else: # 返回自定义的错误返回 # return jsonify({'msg': '参数校验失败'}) # return jsonify(form.errors) flash('搜索关键字不符合要求,请重新输入关键字') return render_template('search_result.html', books=books)
def search(): # 实力化 wtforms 对象,还需要调用该对象的 validate 方法才能真正实施调用 form = SearchForm(request.args) books = BookCollection() if form.validate(): """ 通过 wtforms 取得表单数据而不是通过 request.args 这样才能取到 wtforms 中定义的默认值 """ 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) # dict 序列化 books.fill(yushu_book, q) # return json.dumps(books, default=lambda o: o.__dict__) else: flash('搜索关键字不符合要求,请重新输入!') return jsonify(form.errors) return render_template('search_result.html', books=books)
def search(): """ :return: """ form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data page = form.page.data yushu_book = YuShuBook() key_or_isbn = is_isbn_or_key(q) if key_or_isbn == 'isbn': yushu_book.search_by_isbn(q) else: yushu_book.search_by_keyword(q, page) books.fill(q, yushu_book) # dict序列化 # return jsonify(books) # return json.dumps(result), 200, {'content-type': 'application/json'} else: flash('您搜索的关键字不合法!!') # return json.dumps(books, default=lambda o: o.__dict__) 序列化 return render_template('search_result.html', books=books)
def search(): """ :param q: keyword or isbn :param page: start or count :return: """ form = SearchForm(request.args) books = BookCollection() if form.validate(): q = form.q.data.strip() page = form.page.data yushu_book = YuShuBook() isbn_or_key = is_isbn_or_key(q) if isbn_or_key == 'isbn': yushu_book.search_by_isbn(q) # result = BookViewModel.package_single(result, q) else: yushu_book.search_by_keyword(q, page) # result = BookViewModel.package_collection(result, q) books.fill(yushu_book, q) # return json.dumps(books, default=lambda o: o.__dict__, ensure_ascii=False) else: flash('Keyword is not correct. Please rekey in.') # return jsonify(form.errors) return render_template('search_result.html', books=books)
def search(): # 原则,有很大可能性为假的条件放在最前面 # 将耗时的操作放在后面 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) # 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) # result = BookViewModel.package_collection(result, q) books.fill(yushu_book, q) # return json.dumps(books, default = lambda x: x.__dict__) # return jsonify(result) else: flash('搜索的关键字不符合要求,请重新输入关键字') # return jsonify(form.errors) return render_template('search_result.html', books=books)
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)