Flask知识点总结(二)
视图函数调用请求对象request
Flask 会在请求触发后把请求信息放到request
对象里,你可以从 flask 包导入它:
from flask import request
因为它在请求触发时才会包含数据,所以你只能在视图函数内部调用它。它包含请求相关的所有信息,比如
- 请求的路径
(request.path)
- 请求的方法
(request.method)
- 表单数据
(request.form)
- 查询字符串
(request.args)
等等。
页面提示信息flash()
当我们执行某些动作后,如删除一条信息,希望前台页面提示删除成功,这时可以用上flash()
函数,用来在视图函数里向模板传递提示消息,前台模板页面中get_flashed_messages()
函数则用来在模板中获取提示消息。其用法如下:
- .py文件中
1.导入flash from flask import flash 2.flash()函数在内部会把消息存储到 Flask 提供的 session 对象里。session 用来在请求间存储数据,它会把数据签名后存储到浏览器的 Cookie 中,所以我们需要设置签名所需的密钥: app.config['SECRET_KEY'] = 'asdfjasnagpijoan' 3.在【视图函数】里调用,传入要显示的消息内容: flash('删除成功')
- .html文件中
4.在【模板页面】中获取提示消息 {% for message in get_flashed_messages() %} <div class="alert">{ { message }}</div> {% endfor %}
删除选择POST
请求方法
为了安全的考虑,我们一般会使用POST
请求来提交删除请求,也就是使用表单来实现(而不是创建删除链接)。
<form method="post" action="{
{ url_for('delete', movie_id=movie.id) }}">
<input class="btn" type="submit" name="delete" value="Delete" onclick="return confirm('Are you sure?')">
</form>
不要把密码明文存到数据库中
把密码明文存储在数据库中是极其危险的,假如攻击者窃取了你的数据库,那么用户的账号和密码就会被直接泄露。更保险的方式是对每个密码进行计算生成独一无二的密码散列值,这样即使攻击者拿到了散列值,也几乎无法逆向获取到密码。
Flask 的依赖Werkzeug
内置了用于生成和验证密码散列值的函数,werkzeug.security.generate_password_hash()
用来为给定的密码生成密码散列值,而werkzeug.security.check_password_hash()
则用来检查给定的散列值和密码是否对应。使用示例如下所示:
在存储用户信息的User
模型类添加username
字段和password_hash
字段,分别用来存储登录所需的用户名和密码散列值,同时添加两个方法来实现设置密码和验证密码的功能:
from werkzeug.security import generate_password_hash, check_password_hash
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20))
username = db.Column(db.String(20)) # 用户名
password_hash = db.Column(db.String(128)) # 密码散列值
def set_password(self, password): # 用来设置密码的方法,接受密码作为参数
self.password_hash = generate_password_hash(password) # 将生成的密码保持到对应字段
def validate_password(self, password): # 用于验证密码的方法,接受密码作为参数
return check_password_hash(self.password_hash, password) # 返回布尔值