【Flask实战】Flask知识点总结(二)

导读:本篇文章讲解 【Flask实战】Flask知识点总结(二),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

📃内容主要来自《Flask Web开发实战:入门、进阶与原理解析》作者:李辉
😏面向群体:

  • flask初学者可用来复习知识点
  • 已经有flask开发经验可用来收藏备查

📱有问题随时与我联系,一起学习交流
❤️喜欢的话点个三连吧

上一篇:【Flask实战】Flask知识点总结(一)

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)  # 返回布尔值

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/63048.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!