按流程,未登录时赠书, 跳登陆, 成功后发现gifts表中没插入数据
来源:10-7 类变量的陷阱
鹿宝宝教你编程
2018-06-08
这是登陆的代码
@web.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm(request.form)
if request.method == 'POST' and form.validate():
user = User.query.filter_by(email=form.email.data).first()
if user and user.check_password(form.password.data):
login_user(user, remember=True)
next = request.args.get('next')
if not next or not next.startswith('/'):
next = url_for('web.index')
return redirect(next)
else:
flash('账号不存在或密码错误', category='login_error')
return render_template('auth/login.html', form=form)这是gifts中的
@web.route('/gifts/book/<isbn>')
@login_required
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(next) 后并没有去走gifts中的函数, 数据库里的gifts表中也没数据.
写回答
1回答
-
微分
2018-11-30
我也是这种情况,我自己在 web/gift.py 的 save_to_gifts 视图函数的 if current_user.can_save_to_list(isbn): 这行代码打了个断点,然后尝试赠送书籍的时候,定位到断点代码,然后 F8 直接跳到 else 语句了,说明 if 判断没有通过,那么 if 语句下面的代码都不会执行,所以点击了赠送此书而没有在数据库添加相应的记录就是正常的了。从调试的情况最有可能就是 can_save_to_list 方法编写出了错误,然后回去看了下 models/user.py 下面的 User 模型的 can_save_to_list 方法,发现 if is_isbn_or_key != 'isbn': 这行代码写错了,因为 is_isbn_or_key 是一个函数,这里直接把它作为了一个变量来比较了,所以无论如何 isbn 验证是不能通过的,正确的写法是 if is_isbn_or_key(isbn) != 'isbn': ,修改完再次尝试赠送此书就可以在数据库成功看到添加的记录了。
20
相似问题