所以我试图创建一个“登录”系统,引号是因为永远没有安全性。
我当前的代码如下:
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
if not request.form['user'] or not request.form['password']:
flash('Please enter all the fields', 'error')
else:
username = request.form['user']
password = request.form['password']
exists = db.session.query(User.user).filter_by(
user=username)
if exists > 0:
logged_in = True
session['username'] = username
session['logged_in'] = True
return index(exists=exists)
return render_template('login.html', exists=exists)
return render_template('login.html')
return render_template('login.html')
但是,我得到了错误:
TypeError: '>' not supported between instances of 'BaseQuery' and 'int'
我不明白,因为exists
应该返回整数。
任何帮助都会很棒,谢谢!
答案 0 :(得分:1)
exists = db.session.query(User.user).filter_by(user=username)
是一个BaseQuery对象,当您打印时它会返回SQL查询。您正在尝试比较BasQuery
实例和int
从而导致错误。
>>> exists = db.session.query(User).filter_by(username='me')
>>> exists
<flask_sqlalchemy.BaseQuery object at 0x7fbbb7812b70>
>>> type(exists)
<class 'flask_sqlalchemy.BaseQuery'>
>>> type(0)
<class 'int'>
>>> print(exists)
SELECT user.username AS user_username
FROM user
WHERE user.username = ?
如果要检查exists
是否大于零,则应在查询末尾添加.all(),然后使用len(exists)
,因为它返回一个列表。
>>> exists = db.session.query(User).filter_by(username='me').all()
>>> exists
[<User 1>]
>>> len(exists)
1
>>> type(len(exists))
<class 'int'>