Beispiel #1
0
def send_drift(gid):
    # 发起索要图书请求
    # 1.检查是不是自己的
    # 2.检查鱼豆是否大于1
    # 3.是否满足,成功索要两本书,必须成功送出一本书
    gift = Gift.query.filter_by(id=gid).first_or_404()
    if gift.is_myself_gift(current_user.id):
        flash('这本书是你自己的^_^, 不能向自己索要书籍噢')
        return redirect(url_for('web.book_detail', isbn=gift.isbn))
    if not current_user.can_send_drift():
        return render_template('not_enough_beans.html',
                               beans=current_user.beans)
    wtform = DriftForm(request.form)
    # 步入正文
    if request.method == 'POST' and wtform.validate():
        drift = Drift()
        drift.save_to_drift(wtform, gift, current_user.id,
                            current_user.nickname)
        send_mail(gift.user.email,
                  '有人想要您上传的图书: 《' + gift.book['title'] + '》',
                  'email/get_gift.html',
                  wisher=current_user,
                  gift=gift)
        return redirect(url_for('web.pending'))
    user = User.query.filter_by(id=gift.uid).first_or_404()
    viewmodel = UsersSummary(user)
    return render_template('drift.html',
                           gifter=viewmodel.first,
                           user_beans=current_user.beans,
                           form=wtform)
Beispiel #2
0
def send_drift(gid):
    gift = Gift.query.get_or_404(gid)
    if gift.is_myself_gift(current_user.id):
        return redirect(url_for('web.book_detail', isbn=gift.isbn))
    if not current_user.can_send_drift():
        return render_template('not_enough_beans.html',
                               beans=current_user.beans)

    wtform = DriftForm(request.form)
    if request.method == 'POST' and wtform.validate():
        drift = Drift()
        drift.save_to_drift(wtform, gift, current_user.id,
                            current_user.nickname)
        send_mail(gift.user.email,
                  '有人想要您上传的图书: 《' + gift.book['title'] + '》',
                  'email/get_gift.html',
                  wisher=current_user,
                  gift=gift)
        return redirect(url_for('web.pending'))
    user = User.query.filter_by(id=gift.uid).first_or_404()
    viewmodel = UsersSummary(user)
    return render_template('drift.html',
                           gifter=viewmodel.first,
                           user_beans=current_user.beans,
                           form=wtform)
Beispiel #3
0
def send_drift(gid):
    form = DriftForm(request.form)
    current_gift = Gift.query.get_or_404(gid)

    if current_gift.is_yourself_gift(current_user.id):
        flash('这本书是你自己的^_^, 不能向自己索要书籍噢')
        return redirect(url_for('web.book_detail', isbn=current_gift.isbn))

    if not current_user.can_send_gift():
        return render_template("not_enough_beans.html",
                               beans=current_user.beans)
    gifter = current_gift.user.summary
    if request.method == "POST" and form.validate():
        drift = Drift()
        drift.save_drift(form, current_gift)
        send_email(current_gift.user.email,
                   '有人想要一本书',
                   'email/get_gift.html',
                   wisher=current_user,
                   gift=current_gift)
        return redirect(url_for("web.pending"))
    return render_template("drift.html",
                           gifter=gifter,
                           user_beans=current_user.beans,
                           form=form)
Beispiel #4
0
def save_of_drift_by_gift():
    # 通过向他人赠送书籍--送出书籍
    uid = g.user.id
    data = request.json

    book = data['book']
    # 对方-->接收者
    wish_id = data['wish_id']
    requester = Wish.query.get(wish_id).consumer
    # 我-->赠送者
    gifter = Gift.query.filter_by(soft=True, launched=False, uid=uid).first()

    drift = Drift(book=book, requester=requester, gifter=gifter)
    drift.save_drift()
    return Success()
Beispiel #5
0
def pending():
    drifts = Drift.user_drifts()
    drifts_view = DriftCollection()
    drifts_view.fill(drifts)
    return render_template('pending.html',
                           total=drifts_view.total,
                           drifts=drifts_view.drifts)
Beispiel #6
0
def __set_of_drift_by_did(drift_id=None, mail=None, message=None):
    drift = Drift.get_drift(drift_id)
    drift.recipient_name = mail['nickname']
    drift.mobile = mail['mobile']
    drift.address = mail['province']+mail['city']+mail['address']
    drift.message = message
    return drift
Beispiel #7
0
def save_drift(drift_form, current_gift):
    drift = Drift()
    with db.auto_commit():
        drift_form.populate_obj(drift)

        drift.gift_id = current_gift.id
        drift.requester_id = current_user.nickname
        drift.requester_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.user.id
        book = BookViewModel(current_gift.book.first)

        drift.book_title = book.title
        drift.book_author = book.author
        drift.book_img = book.image
        drift.isbn = book.isbn

        current_user.beans -= 1
Beispiel #8
0
def save_drift(drift_form, current_gift):
    with db.auto_commit():
        drift = Drift()
        # 从form里copy数据到 drift
        drift_form.populate_obj(drift)

        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        drift.gifter_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.user.id
        drift.book_title = current_gift.book.title
        drift.book_author = current_gift.book.author_str
        drift.book_img = current_gift.book.image_large
        current_user.beans -= 1

        db.session.add(drift)
Beispiel #9
0
def redraw_drift(did):
    # 超权
    # uid:1 did:1
    # uid:2 did:2
    with db.auto_commit():
        drift = Drift.filter_by(requester_id=current_user.id,
                                id=did).first_or_404()
        drift.pending = PendingStatus.Redraw
        current_user.beans += 1
    return redirect(url_for('web.pending'))
Beispiel #10
0
    def __init__(self, trade, is_gifter=False, is_wisher=False):
        self.is_gifter = is_gifter
        self.is_wisher = is_wisher
        self.trade = trade

        self.id = trade.id
        self.create_time = trade.create_time
        self.nickname = trade.consumer.wx_name

        self.gifter_id = self.__get_gifter_id()
        self.request_id = self.__get_request_id()
        self.is_gifted_or_requested = Drift.is_gifted_or_requested(trade.bid, self.gifter_id, self.request_id)
Beispiel #11
0
def save_drift(drift_form, current_gift):
    with db.auto_commit():
        drift = Drift()
        # drift.message = drift_form.message.data
        drift_form.populate_obj(drift)

        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        drift.gifter_id = current_gift.user.id
        drift.gifter_nickname = current_gift.user.nickname

        book = BookViewModel(current_gift.book)
        drift.isbn = book.isbn
        drift.book_title = book.title
        drift.book_author = book.author
        drift.book_img = book.image

        current_user.beans -= 1

        db.session.add(drift)
Beispiel #12
0
def save_of_drift_by_request():
    # 通过向他人请求书籍
    uid = g.user.id
    data = request.json
    drift_id = data['drift_id']
    mail = data['mail']
    message = data['message']
    # 我-->接受者
    requester = Consumer.get_consumer(uid)
    if drift_id:
        drift = __set_of_drift_by_did(drift_id=drift_id, mail=mail, message=message)
    else:
        book = data['book']
        # 对方-->赠送者
        gift_id = data['gift_id']
        gifter = Gift.query.get(gift_id)
        drift = Drift(book=book, requester=requester, gifter=gifter, mail=mail, message=message)
    # 鱼豆-1
    requester.beans -= 1
    drift.save_drift()
    return Success()
Beispiel #13
0
def send_drift(gid):
    gifter = Gift.owner(gid)
    if request.method == "POST":
        form = ReceiverForm(request.form)
        if form.validate():
            gift = Gift.query.filter_by(id=gid).first()
            book = gift.book
            if current_user.can_send_drift(book['isbn']):
                with db.auto_commit():
                    current_user.beans -= 1
                    current_user.receive_counter += 1
                    drift = Drift()
                    drift.save_drift(form, gift, book, gifter)
                    db.session.add(drift)
                return redirect(url_for('web.pending'))
            else:
                flash('您的鱼豆不够!')
        else:
            flash('表单提交错误!')
    return render_template(
        'drift.html',
        gifter=gifter,
        beans_ask_one_book=current_app.config["BEANS_ASK_ONE_BOOK"])
Beispiel #14
0
def save_drift(drift_form, current_gift):
    if current_user.beans < 1:
        # TODO 自定义异常
        raise Exception()

    with db.auto_commit():
        drift = Drift()
        drift_form.populate_obj(drift)

        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        drift.gifter_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.user.id

        book = BookViewModel(current_gift.book)
        drift.book_title = book.title
        drift.book_author = book.author
        drift.book_img = book.image
        drift.isbn = book.isbn

        db.session.add(drift)

        current_user.beans -= 1
Beispiel #15
0
def save_drift(drift_form, current_gift):
    with db.auto_commit():
        drift = Drift()
        drift_form.populate_obj(drift)

        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.recipient_name = current_user.nickname
        drift.gifter_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.user.id

        book = BookViewModel(current_gift.book)

        drift.book_title = book.title
        drift.book_author = book.author
        drift.book_img = book.image
        drift.isbn = book.isbn

        current_user.beans -= current_app.config['BEANS_EVERY_DRIFT']

        db.session.add(drift)
Beispiel #16
0
def save_drift(drift_form, current_gift):
    '''
    保存  鱼漂模型
    实现将DriftForm表单中的信息赋值到drift模型中
    :param drift_form:
    :param current_gift:
    :return:
    '''
    with db.auto_commit():
        drift = Drift()
        '''快速实现复制'''
        drift_form.populate_obj(drift)
        '''请求者信息'''
        drift.gift_id = current_gift.id
        drift.request_id = current_user.id
        drift.request_nickname = current_user.nickname
        '''赠送者信息'''
        drift.gifter_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.user.id
        '''书籍类信息'''
        book = BookViewModel(current_gift.book)
        drift.book_title = book.title
        drift.book_author = book.author
        drift.book_img = book.image
        drift.isbn = book.isbn

        current_user.beans -= 1
        db.session.add(drift)
Beispiel #17
0
def save_drift(drift_form,current_gift):
    with db.auto_commit():
        drift = Drift()
        drift_form.populate_obj(drift)

        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        drift.gifter_nickname = current_gift.user.nickname
        drift.gift_id = current_gift.user.id

        book = current_gift.book
        drift.book_title = book['title']
        drift.book_author = book['author']
        drift.book_img = book['image']
        drift.isbn = book['isbn']
        current_user.beans -=1
Beispiel #18
0
def save_drift(drift_form, current_gift):
    with db.auto_commit():
        drift = Drift()
        drift_form.populate_obj(drift)  #使用tform带的拷贝方法

        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        drift.gifter_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.user.id

        book = BookViewModel(current_gift.book)
        drift.book_title = book.title
        drift.book_author = book.author
        drift.book_ima = book.image
        drift.isbn = book.isbn
        try:
            current_user.beans -= 1
        except Exception as e:
            print(e)
        db.session.add(drift)
def save_drift(drift_form, current_gift):
    with db.auto_commit():
        drift = Drift()
        drift_form.populate_obj(drift)  # 将drift_form 的字段赋值到drift

        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.request_nickname = current_user.nickname
        drift.gifter_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.user.id

        book = BookViewModel(current_gift.book)
        drift.book_title = book.title
        drift.book_author = book.author
        drift.book_img = book.image
        drift.isbn = book.isbn

        current_user.brans -= 1
        db.session.add(drift)
Beispiel #20
0
    def save_a_drift(cls, drift_form, current_gift):
        with db.auto_commit():
            book = BookViewModel(current_gift.book.first)

            drift = Drift()
            drift_form.populate_obj(drift)
            drift.gift_id = current_gift.id
            drift.requester_id = current_user.id
            drift.requester_nickname = current_user.nickname
            drift.gifter_nickname = current_gift.user.nickname
            drift.gifter_id = current_gift.user.id
            drift.book_title = book.title
            drift.book_author = book.author
            drift.book_img = book.image
            drift.isbn = book.isbn
            # 当请求生成时,不需要让这个礼物处于锁定状态
            # 这样赠送者是可以收到多个索取请求的,由赠送者选择送给谁
            # current_gift.launched = True
            # 请求者鱼豆-1
            current_user.beans -= 1
            # 但是赠送者鱼豆不会立刻+1
            # current_gift.user.beans += 1
            db.session.add(drift)
        send_email(current_gift.user.email,
                   '有人想要一本书',
                   'email/get_gift',
                   wisher=current_user,
                   gift=current_gift)
Beispiel #21
0
def save_drift(drift_form, current_gift):
    with db.auto_db_commit():
        drift = Drift()
        # drift.message = drift_form.message.data
        drift_form.populate_obj(drift)

        #保存请求者 赠送者信息到数据库
        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        drift.gifter_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.user.id

        #保存书籍信息到数据库
        book = current_gift.book
        drift.book_title = book['title']
        drift.book_author = book['author']
        drift.book_img = book['image']
        drift.isbn = book['isbn']

        current_user.beans -= 1

        db.session.add(drift)
Beispiel #22
0
# -*- coding: utf-8 -*-
# @Time    : 2018/4/22 下午5:03
# @Author  : zhouyajun
from app.libs.enums import PendingEnum
from app.models.drift import Drift

drift = Drift()


class DriftViewModel:
    def __init__(self, drift, current_user_id):
        self.data = self._parse(drift, current_user_id)

    @staticmethod
    def requester_or_gifter(drift, current_user_id):
        global you_are
        if current_user_id == drift.request_id:
            you_are = 'requester'
        if current_user_id == drift.gifter_id:
            you_are = 'gifter'
        return you_are

    def _parse(self, drift, current_user_id):
        you_are = self.requester_or_gifter(drift, current_user_id)
        status_str = PendingEnum.pending_str(drift.status, you_are)
        r = {
            'you_are':
            you_are,
            'drift_id':
            drift.id,
            'book_title':
Beispiel #23
0
def save_drift(drift_form, current_gift):
    with db.auto_commit():
        drift = Drift()
        # 把表单中的信息复制到模型中
        # 必要条件是,模型中的字段名和表单中的字段名相同
        drift_form.populate_obj(drift)

        drift.gift_id = current_gift.id
        drift.taker_id = current_user.id
        drift.taker_nickname = current_user.nickname
        drift.giver_id = current_gift.user.id
        drift.giver_nickname = current_gift.user.nickname

        book = current_gift.book

        drift.book_title = book['title']
        drift.book_author = book['author']
        drift.book_img = book['image']
        drift.isbn = book['isbn']

        current_user.beans -= 1

        db.session.add(drift)
Beispiel #24
0
def save_drift(drift_form, current_gift):
    with db.auto_commit():
        drift = Drift()
        drift_form.populate_obj(drift)  # 表单数据复制到指定对象,确保form内字段与对象内字段一致
        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        drift.gifter_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.user.id

        book = BookViewModel(current_gift.book)

        drift.book_title = book.title
        drift.book_author = book.author
        drift.book_img = book.image
        drift.isbn = book.isbn
        # try:
        current_user.beans -= 1
        # except Exception as e:
        # return render_template('not_enough_beans.html', beans=current_user.beans)
        db.session.add(drift)
Beispiel #25
0
def save_drift(drift_form, current_gift):
    with db.auto_commit():
        drift = Drift()
        # drift.message = drift_form.message.data
        drift_form.populate_obj(drift)

        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        drift.gifter_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.user.id

        book = current_gift.book

        drift.book_title = book['title']
        drift.book_author = book['author']
        drift.book_img = book['image']
        drift.isbn = book['isbn']

        current_user.beans -= current_app.config['BEANS_TRADE_ONE_BOOK']

        db.session.add(drift)
Beispiel #26
0
def save_drift(drift_form, current_gift):
    with db.auto_commit():
        drift= Drift()
        # wtforms提供了把表单数据复制到模型的方法,只要对应字段的名城都一致
        drift_form.populate_obj(drift)
        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        drift.gifter_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.uid

        book = BookViewModel(current_gift.book)

        drift.book_title = book.title
        drift.book_author = book.author
        drift.book_img = book.image
        drift.isbn = book.isbn

        current_user.beans -= 1

        db.session.add(drift)
Beispiel #27
0
def save_drift(drift_form, current_gift):
    with db.auto_commit():
        drift = Drift()
        # drift.message = drift_form.message.data
        drift_form.populate_obj(drift)  # 将form中的数据快速复制到模型中

        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        drift.gifter_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.user.id

        book = BookViewModel(current_gift.book)

        drift.book_title = book.title
        drift.book_author = book.author
        drift.book_img = book.image
        drift.isbn = book.isbn

        current_user.beans -= 1

        db.session.add(drift)
Beispiel #28
0
def save_drift(drift_form, current_gift):
    with db.auto_commit():
        drift = Drift()
        # 如果数据库字段和form里定义的字段相同,可使用下面的额方法一次把form里的数据导入到数据库
        drift_form.populate_obj(drift)

        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        drift.gifter_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.user.id

        book = BookViewModel(current_gift.book)

        drift.book_title = book.title
        drift.book_author = book.author
        drift.book_img = book.image
        drift.isbn = book.isbn

        current_user.beans -= 1

        db.session.add(drift)
Beispiel #29
0
def save_drift(drift_form, current_gift):
    if current_user.beans < 1:
        # TODO 自定义异常
        raise Exception()

    with db.auto_commit():
        drift = Drift()
        drift_form.populate_obj(drift)

        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        drift.gifter_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.user.id

        book = BookViewModel(current_gift.book)
        drift.book_title = book.title
        drift.book_author = book.author
        drift.book_img = book.image
        drift.isbn = book.isbn

        db.session.add(drift)

        current_user.beans -= 1
Beispiel #30
0
def save_drift(drift_form, current_gift):
    with db.auto_commit():
        drift = Drift()

        drift_form.populate_obj(drift)

        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        drift.gifter_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.user.id

        book = BookSingleModel(current_gift.book)

        drift.book_title = book.title
        drift.book_author = book.author
        drift.book_img = book.image
        drift.isbn = book.isbn

        # 向其他用户请求书籍,本身消耗一个鱼豆
        try:
            if current_user.beans>=1:
                current_user.beans -= 1
        except Exception as e:
            raise e

        db.session.add(drift)
Beispiel #31
0
def save_drift(drift_form, current_gift):
    with db.auto_commit():
        drift = Drift()
        # 邮寄信息
        # drift_form.populate_obj(drift)
        drift.set_attrs(drift_form.data)
        # 书籍信息
        book = BookViewModel(current_gift.book)
        drift.isbn = book.isbn
        drift.book_title = book.title
        drift.book_author = book.author
        drift.book_img = book.image
        # 请求者信息
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        # 赠送者信息
        drift.gifter_id = current_gift.user.id
        drift.gift_id = current_gift.id
        drift.gifter_nickname = current_gift.user.nickname
        try:
            current_user.beans -= 1
            if current_user.beans < 0:
                raise ValueError
        except Exception as e:
            print('写日志')
            raise e
        db.session.add(drift)
Beispiel #32
0
def save_drift(drift_form, current_gift):
    with db.auto_commit():
        drift = Drift()
        # 如果字段都一样,可以按下面这样赋值
        drift_form.populate_obj(drift)

        drift.gift_id = current_gift.id
        drift.requester_id = current_user.id
        drift.requester_nickname = current_user.nickname
        drift.gifter_nickname = current_gift.user.nickname
        drift.gifter_id = current_gift.user.id

        book = current_gift.book
        drift.book_title = book['title']
        drift.book_author = book['author']
        drift.book_img = book['image']
        drift.isbn = book['isbn']

        current_user.beans -= 1  # 理论上用户的鱼豆不可能小于1
        db.session.add(drift)