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

news2025/5/23 13:51:00

文章目录

  • 8 个人博客
    • 8.4 初始化博客
    • 8.5 使用Flask-Login管理用户认证
    • 8.6 CSRFProtect实现CSRF保护
    • 8.7 编写博客后台
    • 小结

请添加图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1010790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

XUbuntu22.04之查找进程号pidof、pgrep总结(一百九十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

服务器中了勒索病毒怎么办?勒索病毒解密,数据恢复

勒索病毒是一种比较常见的电脑病毒&#xff0c;它们给企业的生产经营和发展带来了很大的影响。可是绝大多数企业在这方面并没有做合理的预案&#xff0c;这也导致当安全运维人员或者企业主发现中了勒索病毒以后手足无措。那云天数据恢复中心就用这篇文章来告诉大家当服务器中了…

如何解决msvcp120.dll丢失问题,msvcp120.dll丢失的解决方法介绍

Microsoft Visual C Redistributable Packages&#xff08;简称MSVCRP&#xff09;是一组由微软提供的软件开发库&#xff0c;其中包含一系列用于运行使用Visual Studio开发的应用程序所需的运行时组件。MSVCRP包含了多个DLL文件&#xff0c;其中MSVCP120.dll就是其中之一。这个…

Linux centos7创建文件

在系统中创建文件或目录&#xff0c;是最基本的操作&#xff0c;也是经常遇到的操作。本文仅关注普通文件的创建。 最简单的情况是创建一个空文件。但有时&#xff0c;根据实际情况&#xff0c;我们需要创建多个空文件&#xff0c;创建多个相同内容的文件&#xff0c;有时又可…

k8s集群中部署项目之数据库准备

k8s集群中部署微服务项目之数据库准备 一、navicat准备 二、 MySQL数据库连接 lb.kubesphere.io/v1alpha1: openelb protocol.openelb.kubesphere.io/v1alpha1: layer2 eip.openelb.kubesphere.io/v1alpha2: layer2-eip三、 创建项目数据库及数据导入 3.1 mall_oms&#xff0…

【毕设选题】 大数据二手房数据爬取与分析可视化 -python 数据分析 可视化

# 1 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通…

神经内科常用评估量表汇总,建议收藏!

根据神经内科医生的量表使用情况&#xff0c;我整理了10个常用的神经内科量表&#xff0c;可在线评测直接出结果&#xff0c;可转发使用&#xff0c;可生成二维码使用&#xff0c;可创建项目进行数据管理&#xff0c;有需要的小伙伴赶紧收藏&#xff01; 眩晕障碍量表 眩晕障碍…

【Java】有 A、B、C 三个线程,如何保证三个线程同时执行?在并发情况下,如何保证三个线程依次执行?如何保证三个线程有序交错执行?

Q1&#xff1a;有 A、B、C 三个线程&#xff0c;如何保证三个线程同时执行&#xff1f; public class ThreadSafeDemo {public static void main(String[] args) throws InterruptedException {int size 3;ThreadSafeDemo threadSafeDemo new ThreadSafeDemo();CountDownLat…

TypeScript扩展类型定义

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 什么是声明文件&#xff1f; declare 1. 声明全局变量&#xff1a; 2. 声明全局函数&#xff1a; 3. 声明全局类…

2023年最适合0基础上手的—学生管理系统制作,另赠福利:GUI学生管理系统源码

前言 嗨喽~大家好呀&#xff0c;这里是小曼呐 ❤ ~! 环境使用: python3.8解释器Pycharm 编辑器 可领取福利: GUI学生管理系统源码 代码展示 从学生信息数据库<文本文件>里面读取数据 f open(学生信息.txt, encodingutf-8) info_list f.readlines()创建一个空列表 …

代码随想录算法训练营第48天|198. 打家劫舍,213. 打家劫舍 II,337. 打家劫舍 III

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

ubuntu 安装截图软件 flameshot 和微信 electronic-wechat

目录 一、截图工具flameshot 二、微信electronic-wechat 2.1 法一 2.2 法二 一、截图工具flameshot linux安装flameshot 1、去github下载对应deb版本 Releases flameshot-org/flameshot GitHub 2、先更新一次依赖 sudo apt-get install -f 3、安装依赖 # Compile-t…

OceanBase杨传辉传递亚运火炬:国产数据库为“智能亚运”提供稳稳支持

9 月 14 日&#xff0c;亚运火炬传递到了浙江台州&#xff0c;OceanBase 的 CTO 杨传辉作为火炬手交接了第 89 棒火炬。 2010 年&#xff0c;杨传辉作为创始成员之一参与自研原生分布式数据库 OceanBase。十年磨一剑&#xff0c;国产数据库 OceanBase 交出了一张优秀的成绩单&a…

JavaScript Iterator 迭代器:简化集合遍历的利器

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 引言 1. 迭代器的概念 2. 迭代器的属性 3. 迭代器的应用场景 3.1 数组遍历 3.2 对象遍历 3.3 Map 遍历 #3.4…

pandas-profiling一键生成探索性数据分析报告

安装库 1、先升级pip python.exe -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple 2、安装pandas-profiling pip install pandas-profiling -i https://pypi.tuna.tsinghua.edu.cn/simple 代码演示 # 导入相关库 import numpy as np import pand…

端游防截帧解决方案

对于一款游戏而言&#xff0c;玩家第一眼关注到的美术表现&#xff0c;会在很大程度上决定了玩家是否会产生兴趣并继续了解游戏内容。想要在激烈的市场竞争中占据一席之地&#xff0c;游戏美术的重要程度已不言而喻。 如被奉为“国产3A游戏之光”的《黑神话&#xff1a;悟空》…

由于找不到vcruntime140_1.dll文件的解决方法,带你了解vcruntime140_1.dll这个dll

vcruntime140_1.dll是Microsoft Visual C Redistributable for Visual Studio 2019的动态链接库文件之一。它提供了许多基本的运行时功能&#xff0c;使得使用Visual Studio 2019编译的应用程序能够正常运行。然而&#xff0c;在运行或启动一些应用程序时&#xff0c;可能会出现…

每天一道leetcode:剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(适合初学者)

今日份题目&#xff1a; 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xf…

常见音视频、流媒体开源编解码库及官网(四十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

大麦订单生成器最新版 大麦订单一键生成截图

1.可以一键添加&#xff0c;生成的假订单没有水印&#xff0c;界面也很真实。 2.在软件中输入生成的信息&#xff0c;这是产品信息&#xff0c;选择生成的产品图像&#xff0c;最后生成它。 后台一键生成&#xff0c;独立后台管理 教程&#xff1a;解压源码&#xff0c;修改数…