def save_to_gifts(isbn): if current_user.can_save_to_list(isbn): with db.auto_commit(): gift = Gift() gift.isbn = isbn gift.uid = current_user.id current_user.beans += current_app.config['BEANS_UPLOAD_ONE_BOOK'] db.session.add(gift) else: flash("这本书以添加进您的赠送清单或已经存在于您的心愿清单,请不要重复添加") return redirect(url_for('web.book_detail', isbn=isbn))
def save_to_gifts(isbn): if current_user.can_save_to_list(isbn): # 事务,保证user和gift的一致性,rollback # try: with db.auto_commit(): gift = Gift() gift.isbn = isbn gift.uid = current_user.id ################################################# current_user.beans += current_app.config['BEANS_UPLOAD_ONE_BOOK'] db.session.add(gift) # db.session.commit() # except Exception as e: # db.session.rollback() # raise e else: flash('这本书已经添加至你的赠送清单或者一存在于你的心愿清单,请不要重复添加') return redirect('web.book_detail', isbn=isbn)
def save_to_gifts(isbn): yushu_book = YuShuBook() yushu_book.search_by_isbn(isbn) # gifting = Gift.query.filter_by(uid=current_user.id, isbn=isbn, status=1, # launched=False).first() # wishing = Wish.query.filter_by(uid=current_user.id, isbn=isbn, status=1, # launched=False).first() if current_user.can_save_to_list(isbn): # 既不在赠送清单,也不在心愿清单才能添加 with db.auto_commit(): gift = Gift() gift.uid = current_user.id gift.isbn = isbn # gift.book_id = yushu_book.data.id db.session.add(gift) current_user.beans += current_app.config['BEANS_UPLOAD_ONE_BOOK'] else: flash('这本书已添加至你的赠送清单或已存在于你的心愿清单,请不要重复添加') return redirect(url_for('web.book_detail', isbn=isbn))
def save_to_gifts(isbn): if current_user.can_save_to_list(isbn): # 事务 # rollback # try: with db.auto_commit(): gift = Gift() gift.isbn = isbn gift.uid = current_user.id ############################# # current_user.beans += 0.5 current_user.beans += current_app.config['BEANS_UPLOAD_ONE_BOOK'] db.session.add(gift) # db.session.commit() # except Exception as e: # db.session.rollback() # raise e else: flash('这本书已添加至你的赠送清单或者已存在你的心愿清单,请不要重复添加') return redirect(url_for('web.book_detail', isbn=isbn))
def save_to_gifts(isbn): if current_user.can_save_to_list(isbn): # try: with db.auto_commit(): gift = Gift() gift.isbn = isbn # 获得当前用户的id gift.uid = current_user.id # 当前用户增加0.5个鱼豆 # current_user.beans += 0.5 current_user.beans += current_app.config['BEANS_UPLOAD_ONE_BOOK'] db.session.add(gift) # db.session.commit() # except Exception as e: # # 数据库回滚,当上方的数据库操作失败会影响后面的数据库操作,建议进行回滚 # db.session.rollback() # raise e else: flash("这本书已添加至您的赠送清单或已存在与您的心愿清单,请不要重复添加") return redirect(url_for('web.book_detail', isbn=isbn))
def book_uplode(): form = LengForm(request.form) book = Book() uid = current_user.id if request.method == 'POST' and form.validate(): image = request.files['image'] fname = image.filename UPLOAD_FOLDER = current_app.config['UPLOAD_FOLDER'] ALLOWED_EXTENSIONS = ['png', 'jpg', 'jpeg', 'jpg'] flag = '.' in fname and fname.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS if not flag: flash('文件类型错误,请检查上传的图片类型,仅限于png、PNG、jpg、JPG') return redirect(url_for('views.book_uplode')) if Book.query.filter_by(isbn=book.isbn).first(): flash("已经存在这本书了,快去搜索栏搜索吧") else: with db.auto_commit(): image.save('{}{}'.format(UPLOAD_FOLDER, fname)) book.image = '/static/uplode/{}'.format(fname) book.title = form.title.data book.author = form.author.data book.isbn = form.isbn.data book.publisher = form.publisher.data book.summary = form.summary.data db.session.add(book) if Gift.query.filter_by(isbn=book.isbn, uid=uid, launched=False).first(): flash('这本书已经添加至你的赠送清单或已存在于你的心愿清单,请不要重复添加') else: with db.auto_commit(): gift = Gift() gift.isbn = form.isbn.data gift.uid = uid current_user.beans += current_app.config[ 'BEANS_UPLOAD_ONE_BOOK'] db.session.add(gift) return redirect(url_for('views.book_uplode')) return render_template('book_uplode.html', form=form)
def save_to_gifts(isbn): '''怎送此书''' if current_user.can_save_to_list(isbn): # 事物 # rollback # try: with db.auto_commit(): gift = Gift() gift.isbn = isbn gift.uid = current_user.id # current_user代表实例化后的User模型 ############## current_user.beans += current_app.config['BEANS_UPLODA_ONE_BOOK'] db.session.add(gift) # db.session.commit() # except Exception as e: # db.session.rollback() # raise e else: flash('这本书已经添加到你的赠送清单或已存在你的心愿清单, 请不要重复添加') return redirect(url_for('web.book_detail', isbn=isbn))
def save_to_gifts(isbn): if current_user.can_save_to_list(isbn): #事务 #rollback # try: with db.auto_commit(): gift = Gift() gift.isbn = isbn gift.uid = current_user.id #current_user 与user中的模型get_user方法相对 # current_user.beans +=0.5 #鱼豆 current_user.beans += current_app.config['BEANS_UPLOAD_ONE_BOOK'] db.session.add(gift) # db.session.commit() # except Exception as e: # db.session.rollback() # raise e else: flash('这本书已存在你的赠送清单,或者你的心愿清单,请不要重复添加') # ajax技术不刷新页面返回数据 或者将整个页面缓存起来,从而提高服务器性能 return redirect(url_for('web.book_detail', isbn=isbn))
def save_to_gifts(isbn): ''' 保存到赠送清单 1 确定是否能保存到清单 2 礼物的isbn 用户id 鱼漂数量增加 :param isbn: :return: ''' if current_user.can_save_to_list(isbn): ''' 事务 回滚机制 一般只要进行db.session.commit() 最好try..except..进行事务的回滚操作 ''' with db.auto_commit(): gift = Gift() gift.isbn = isbn gift.uid = current_user.id current_user.beans += current_app.config['BEANS_UPLOAD_ONE_BOOK'] db.session.add(gift) else: flash('这本书已经添加至您的赠送清单或已存在您的心愿清单,不要重复添加') return redirect(url_for('web.book_detail', isbn=isbn))
def save_to_gifts(isbn): #假如事务提交失败了,需进行回滚 rollback if current_user.can_save_to_list(isbn): # try: # gift = Gift() # gift.uid = current_user.id #current_user指代当前登陆的用户 通过def get_user(uid):获取当前用户信息 # # current_user.beans += 0.5 # current_user.beans += current_app.config['BEANS_UPLOAD_ONE_BOOK'] # db.session.add(gift) # db.session.commit() # except Exception as e: # db.session.rollback() #假如commit或者前面流程报错,则进行事务回滚 # raise e #抛出异常 with db.auto_db_commit(): gift = Gift() gift.isbn = isbn gift.uid = current_user.id current_user.beans += current_app.config['BEANS_UPLOAD_ONE_BOOK'] db.session.add(gift) else: flash('这本书已添加至你的赠送清单或已存在于你的心愿清单,请不要重复添加') return redirect(url_for('web.book_detail', isbn=isbn))
def save_to_gifts(isbn): if current_user.can_save_to_list(isbn): # 事务 # 回滚 # try: with db.auto_commit(): gift = Gift() gift.isbn = isbn # current_user实际上是实例化的User模型 gift.uid = current_user.id ########################## # 每上传一本书赠送0.5个鱼豆 # current_user.beans += 0.5 current_user.beans += current_app.config['BEANS_UPLODAD_ONE_BOOK'] db.session.add(gift) # db.commit() # except Exception as e: # # 如果try语句执行失败,则回滚 # db.session.rollback() # raise e else: flash('这本书已经添加至你的赠送清单或已存在于你的心愿清单,请不要重复添加') return redirect(url_for('web.book_detail', isbn=isbn))
def save_to_gifts(isbn): if current_user.can_save_to_list(isbn): with db.auto_commit(): gift = Gift() gift.isbn = isbn gift.uid = current_user.id current_user.beans += current_app.config['BEANS_UPLOAD_ONE_BOOK'] db.session.add(gift) # try: # gift = Gift() # gift.isbn = isbn # gift.uid = current_user.id # current_user.beans += current_app.config['BEANS_UPLOAD_ONE_BOOK'] # db.session.add(gift) # db.session.commit() # except Exception as e: # db.session.rollback() # raise e else: flash('这本书已经在赠送清单或心愿清单,请不要重复添加') # book_detail -> save_to_gifts -> book_detail # 这里 book_detail会重新渲染,可以考虑 使用 Ajax 和静态文件缓存 return redirect(url_for('web.book_detail', isbn=isbn))
def save_to_gifts(isbn): """ 赠送书籍 current_user 就是我们实例化后的User模型,可以通过模型去拿到属性 :param isbn: :return: """ if current_user.can_save_to_list(isbn): # 事务 提交与回滚 try: gift = Gift() gift.isbn = isbn gift.uid = current_user.id current_user.beans += current_app.config['BEANS_UPLOAD_ONE_BOOK'] db.session.add(gift) db.session.commit() except Exception as e: db.session.rollback() raise e else: # ajax 技术进行改善原本所在页面在完成要求后回到原页面 flash('这本书已添加至你的赠送清单或已存在于你的心愿清单,请不要重复添加') return redirect(url_for('web.book_detail', isbn=isbn))