Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
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)
Esempio n. 6
0
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)
Esempio n. 7
0
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)
Esempio n. 8
0
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)
Esempio n. 9
0
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)
Esempio n. 10
0
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)
Esempio n. 11
0
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)
Esempio n. 12
0
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)
Esempio n. 13
0
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
Esempio n. 14
0
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)
Esempio n. 15
0
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)
Esempio n. 16
0
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)
Esempio n. 17
0
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)
Esempio n. 18
0
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)
Esempio n. 19
0
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)
Esempio n. 20
0
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)
Esempio n. 21
0
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)
Esempio n. 22
0
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)
Esempio n. 23
0
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':'参数有误'})
Esempio n. 24
0
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)
Esempio n. 25
0
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)