python - 如何通过烧瓶检查 db sqlite 中的布尔值是否为真
问题描述
我正在用 python 在烧瓶中写一个小网站。这对我来说是全新的,但我已经弄清楚如何创建站点、路由、管理员登录、注册表单等。
现在我想检查并记住登录后您是否是管理员。我正在考虑通过我的 sqlite 数据库中的布尔值来解决这个问题。但我没有检查布尔值是真还是假。
可能这不是最好的方法,如果是这样,请指出我正确的方向。而且,尽管如此,了解如何检查我的数据库中的布尔值对我来说是一件有趣的事情。
对于我拥有的数据库;
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(15), unique=True)
email = db.Column(db.String(50), unique=True)
password = db.Column(db.String(80))
admin = db.Column(db.Boolean, default=False)
在数据库中,这转化为;
sqlite> select * from user;
1|admin|test@test.com|sha256$c2GxyyGc$d4df5929026fa62e49a587a8275ed4c
0abfb45e6d35d3617146e7326c13367e1|1
2|user|user@test.com|sha256$9y9Pz2PY$d2445b365d98a55e041d32c9781fba22f4a9e7db72c
f4c490e3ac1b3d3a3ffd4|0
sqlite>
最后一个值是“管理值”
检查登录名,以及您是否是管理员
@app.route('/login', methods= ['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user:
if check_password_hash(user.password, form.password.data):
login_user(user, remember=form.remember.data)
adm = User.query.filter(User.admin.is_(True)).first()
if adm == True:
return redirect(url_for('dashboard'))
return redirect(url_for('index'))
return '<h1>Invalid username or password</h1>'
return render_template('login.html', form = form)
我希望去仪表板,但我被重定向到索引页面。如果我返回 adm 的值,我会收到此错误:
TypeError:视图函数没有返回有效响应。返回类型必须是字符串、字典、元组、响应实例或 WSGI 可调用,但它是用户。
我明白这显然是一个强烈的暗示,但我无法正确理解。
解决方案
该语句user = User.query.filter_by(username=form.username.data).first()
应该已经返回一条User
记录,
因此进一步查询adm = User.query.filter(User.admin.is_(True)).first()
没有意义。在提取的记录上检查所需的属性,User
如下所示:
...
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user:
if check_password_hash(user.password, form.password.data):
login_user(user, remember=form.remember.data)
if user.admin:
return redirect(url_for('dashboard'))
return redirect(url_for('index'))
return '<h1>Invalid username or password</h1>'
return render_template('login.html', form = form)
推荐阅读
- django - 具有不同路径的 django 静态文件
- android - java.io.ioexception 连接改造android上的流意外结束
- terraform - Terraform 在导入当前状态后询问“ami”和“instance_type”
- azure - 无法在 terraform azure 提供程序中获取 SystemAssigned 身份属性
- excel - Excel - 基于另一列的公式链接单元格
- google-maps - Mackbook safari location 一次又一次询问,即使我允许了
- android - W/BiChannelGoogleApi:[FirebaseAuth:] getGoogleApiForMethod() 返回 Gms:com.google.firebase.auth.api.internal.zzal@395d2a7 错误
- forms - Codeignter 3图像上传代码不起作用
- javascript - 无需单击按钮即可将数据视图移动到 javascript
- javascript - 当前周 + 1 每当点击下一个