예제 #1
0
파일: book.py 프로젝트: ZTT001/learngit
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)
예제 #2
0
파일: user.py 프로젝트: ZTT001/learngit
 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
예제 #3
0
파일: book.py 프로젝트: heylel/fisher
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)
예제 #4
0
파일: book.py 프로젝트: ZTT001/learngit
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)
예제 #5
0
파일: user.py 프로젝트: heylel/fisher
    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
예제 #6
0
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)
예제 #7
0
    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
예제 #8
0
파일: book.py 프로젝트: gpython/fisher
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)
예제 #9
0
    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
예제 #10
0
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)
예제 #11
0
파일: book.py 프로젝트: starstarM/fisher
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)
예제 #12
0
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)
예제 #13
0
    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
예제 #14
0
파일: book.py 프로젝트: wangshengzhe/fisher
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)
예제 #15
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, 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)
예제 #16
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)
            # 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)
예제 #17
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)
예제 #18
0
파일: book.py 프로젝트: gotgith/fisher
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)
예제 #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, 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)
예제 #20
0
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)
예제 #21
0
파일: book.py 프로젝트: Air-Zhuang/fisher
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)
예제 #22
0
 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
예제 #23
0
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)
예제 #24
0
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)
예제 #25
0
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)
예제 #26
0
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)
예제 #27
0
    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
예제 #28
0
파일: book.py 프로젝트: paststory/fisher
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)
예제 #29
0
파일: book.py 프로젝트: whyjust/fisher
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)
예제 #30
0
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
예제 #31
0
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)
예제 #32
0
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)
예제 #33
0
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)
예제 #34
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)
예제 #35
0
파일: book.py 프로젝트: songszw/fisher
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)
예제 #36
0
파일: wish.py 프로젝트: heylel/fisher
 def book(self):
     yushu_book = YuShuBook()
     yushu_book.search_by_isbn(self.isbn)
     return yushu_book.first