Flask狼书笔记 | 08_个人博客(下)

简介: 8 个人博客8.4 初始化博客1、安全存储密码密码不要以明文的形式直接存储在数据库中,以防被攻击者盗取、泄露。一般的做法是,不存储密码本身,而存储通过密码生成的散列值。(但密码仍然可能在传输过程中被截获)

8 个人博客

8.4 初始化博客

1、安全存储密码

密码不要以明文的形式直接存储在数据库中,以防被攻击者盗取、泄露。一般的做法是,不存储密码本身,而存储通过密码生成的散列值。(但密码仍然可能在传输过程中被截获)

from werkzeug.security import generate_password_hash, check_password_hash
password_hash = generate_password_hash('cat')
is_right = check_password_hash(password_hash, 'cat')

疑惑:加盐散列值、密码扩展,是什么样的作用原理?

2、创建管理员用户

可以提供一个博客初始化命令,以免手动在数据库中,使用sql语句添加管理员用户记录。

@app.cli.command()
@click.option('--username', prompt=True, help='The username used to login.')
@click.option('--password', prompt=True, hide_input=True,
             confirmation_prompt=True, help='The password used to login.')
def init(username, password):
    # 创建管理员记录相关的操作
    ...

prompt参数设置为True会在用户没有输入参数值时,请求用户输入。hide_input用于隐藏输入内容,confirmation_prompt用于要求二次输入确认。

8.5 使用Flask-Login管理用户认证

博客程序需要根据用户的身份开放不同的功能,扩展Flask-Login提供了用户会话管理功能,管理用户的登入、登出,以及视图保护(如要求某些视图登录后才能访问)功能。(p275)


不过,这些功能即使自己利用session对象手动实现,也比较简单。

8.6 CSRFProtect实现CSRF保护

关于对资源的更新和删除操作,为了防止csrf攻击,应当使用POST方法提交这类请求,即使用表单提交。但为每个这样的操作都需要单独定义一个WTForms表单类,显然太过麻烦。Flask-WTF内置的CSRFProtect扩展为这类操作提供了更简单的方式。


使用该csrf保护,首先需要初始化扩展,并注册到程序实例。

from flask_wtf.csrf import CSRFProtect
csrf = CSRFProtect()
csrf.init_app(app)

然后直接在表单中创建一个csrf的隐藏字段。

<form method="post" action="{{ url_for('delete_post', post_id=post.id) }}">
    <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
    ...
</form>

并且你可以注册一个错误处理函数,捕捉程序中产生的csrf错误,并产生对应的响应。

from flask_wtf.csrf import CSRFError
@app.errorhandler(CSRFError)
def handle_csrf_error(e):
    return render_template('errors/400.html', description=e.description), 400

8.7 编写博客后台

1、文章管理——删除确认弹窗

在后台管理中可以查看文章列表,并删除其中的文章,删除通常是不可恢复的。因此,为了防止误触,我们需要添加一个删除确认弹窗,使用浏览器内置的confirm弹窗组件即可实现。

<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('Are you sure?');">
    删除
</button>

这一小结的其它内容都是一些比较简单的、面向业务逻辑的考虑,就不继续介绍了


Flask-Admin扩展:可以简化你编写管理后台的工作。(p297)


小结

这个项目,书中足足用了80页来介绍,涉及的内容确实比较丰富。我在看的时候有些赶进度,走马观花,快速带过。大部分的知识点都没有经过我的实践去体会,又只能把这个任务留给以后去完成了啊!

相关文章
|
4月前
|
前端开发 JavaScript 数据库
Flask狼书笔记 | 09_图片社交网站 - 大型项目的架构与需求(2)
9.8 收藏图片 前面已经学习过如何使用关联表来表示多对多关系,缺点是只能表示关系,不能存储数据(如我还想记录下收藏图片的时间戳)。这种情况下,我们可以使用关联模型来表示多对多关系。 在关联模型中,我们将Photo模型与User模型的多对多关系,分离成了User模型和Collect模型的一对多关系,和Photo模型与Collect模型的一对多关系。
66 0
|
4月前
|
存储 前端开发 API
Flask狼书笔记 | 08_个人博客(上)
8 个人博客 个人博客是一个典型的CMS(内容管理系统),通常包含前台和后台两部分。这一张将涉及更高级的项目组织方式,以及一些新的Python包:Flask-Login,Unidecode。 8.1 大型项目结构
29 0
|
4月前
|
SQL 存储 前端开发
Flask狼书笔记 | 07_留言板
7 留言板 这是一个简单的程序,涉及到的大部分是之前所学习到的基础知识。新涉及的python包: BootStrap-Flask,Flask-Moment,Faker,Flask-Debug Toolbar。
43 0
|
4月前
|
JSON API 开发工具
Flask狼书笔记 | 06_电子邮件
6 电子邮件 Web中,我们常在用户注册账户时发送确认邮件,或是推送信息。邮件必要的字段包含发信方(sender),收信方(to),邮件主题(subject),邮件正文(body)。
29 0
|
4月前
|
存储 前端开发 JavaScript
Flask狼书笔记 | 09_图片社交网站 - 大型项目的架构与需求(1)
9 图片社交网站 本章新涉及的Python包:Flask-Dropzone, Pillow, Flask-Avatars, Whoosh, Flask-Whooshee。 9.1 项目组织架构 1、功能式架构
52 0
|
4月前
|
SQL 存储 数据库
Flask狼书笔记 | 05_数据库
5 数据库 这一章学习如何在Python中使用DBMS(数据库管理系统),来对数据库进行管理和操作。本书使用SQLite作为示例。 注:按下Ctrl+F5,或Shift+F5可以清除浏览器缓存。 5.1 数据库的分类
34 0
|
16天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【4月更文挑战第9天】本文对比了Python三大Web框架Django、Flask和Pyramid。Django功能全面,适合快速开发,但学习曲线较陡;Flask轻量灵活,易于入门,但默认配置简单,需自行添加功能;Pyramid兼顾灵活性和可扩展性,适合不同规模项目,但社区及资源相对较少。选择框架应考虑项目需求和开发者偏好。
|
4天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
22 1
|
4天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
12 1
Flask框架在Python面试中的应用与实战
|
10天前
|
数据库 开发者 Python
Python中使用Flask构建简单Web应用的例子
【4月更文挑战第15天】Flask是一个轻量级的Python Web框架,它允许开发者快速搭建Web应用,同时保持代码的简洁和清晰。下面,我们将通过一个简单的例子来展示如何在Python中使用Flask创建一个基本的Web应用。