Flask狼书笔记 | 08_个人博客(下)
文章目录
- 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页来介绍,涉及的内容确实比较丰富。我在看的时候有些赶进度,走马观花,快速带过。大部分的知识点都没有经过我的实践去体会,又只能把这个任务留给以后去完成了啊!
相关文章:
Flask狼书笔记 | 08_个人博客(下)
文章目录 8 个人博客8.4 初始化博客8.5 使用Flask-Login管理用户认证8.6 CSRFProtect实现CSRF保护8.7 编写博客后台小结 8 个人博客 8.4 初始化博客 1、安全存储密码 密码不要以明文的形式直接存储在数据库中,以防被攻击者盗取、泄露。一般的做法是,不…...
机器学习第十课--提升树
一.Bagging与Boosting的区别 在上一章里我们学习了一个集成模型叫作随机森林,而且也了解到随机森林属于Bagging的成员。本节我们重点来学习一下另外一种集成模型叫作Boosting。首先回顾一下什么叫Bagging? 比如在随机森林里,针对于样本数据,…...
react scss.modules中使用iconfont
全局引入详见全局引入scss 全局的scss文件中引入iconfont.css use "../font/iconfont.css"; 然后就可以正常使用啦...
使用Jmeter+ant进行接口自动化测试(数据驱动)
最近在做接口测试,因为公司有使用jmeter做接口测试的相关培训资料,所以还是先选择使用jmeter来批量管理接口,进行自动化测试。话不多说,进入正题: 1.使用csv文件保存接口测试用例,方便后期对接口进行维护&…...
可视化图表组件之股票数据分析应用
股市是市场经济的必然产物,在一个国家的金融领域之中有着举足轻重的地位。在过去,人们对于市场走势的把握主要依赖于经验和直觉,往往容易受到主观因素的影响,导致决策上出现偏差。如今,通过数据可视化呈现,…...
STM32 ~ GPIO不同模式之间的区别与实现原理
GPIO全称General Purpose Input Output ,即通用输入/输出。其实GPIO的本质就是芯片的一个引脚,通常在ARM中所有的I/O都是通用的。不过,由于每个开发板上都会设计不同的外围电路,这就造成了GPIO的功能可能有所不同。大部分GPIO都是…...
dvwa靶场通关(十二)
第十二关:Stored Cross Site Scripting (XSS)(存储型xss) low 这一关没有任何防护,直接输入弹窗代码 弹窗成功 medium 先试试上面的代码看看,有没有什么防护 发现我们的script标签不见了,应该是被过滤掉…...
【shell学习】企业运维工作中常用的shell脚本
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...
对权限的理解和使用
目录 一:用户权限: ★su命令 ★sudo命令 二:文件权限 ★文件的类型权限 ★文件夹的权限的使用 ▲文件夹的可读权限: ▲文件夹的可写权限: ▲文件夹的可执行权限: ★权限的修改操作 ▲chmod命令 ★对于文件的…...
MySQL 5.7 通过数据库idb文件快速导入至另一台数据库
前言 数据库有一张表里有1000万条数据,通过sql导入会非常缓慢,如果数据库版本相同,迁移表可以通过复制表idb文件实现快速迁移。 一、系统环境 原服务器系统:centos7.4 原服务器数据库版本:MySQL5.7.21 新服务器系统…...
第一章 计算机网络基础
目录 1.1 网络体系结构 1.1.1 OSI/RM七层参考模型 1.1.2 OSI/RM和TCP/IP模型的比较 1.1.3 五层协议的体系结构 1.1.4 计算机1向计算机2发送数据过程 1.1.5 TCP/IP体系结构的具体实现 1.2 网络设备概述 1.2.1 互联设备与OSI的对应关系 1.2.2 集线器(HUB) 1.2.3 网桥(B…...
本地电脑搭建SFTP服务器,并实现公网访问
本地电脑搭建SFTP服务器,并实现公网访问 文章目录 本地电脑搭建SFTP服务器,并实现公网访问1. 搭建SFTP服务器1.1 下载 freesshd 服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2. 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内…...
易基因直播预告|细菌微生物基因表达调控表观研究易基因科技
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 DNA甲基化是在半个多世纪前在细菌中发现的。DNA碱基可以作为一个表观遗传调节因子——也就是说,它可以赋予相同的基因序列不同的和可逆的调控状态。在真核生物中,…...
Flask在线部署ChatGLM2大模型
1、 拉取镜像 docker pull swr.cn-central-221.ovaijisuan.com/mindformers/mindformers_dev_mindspore_2_0:mindformers_0.6.0dev_20230616_py39_372、 新建docker.sh -p 8000:8000 是宿主机映射到镜像8000端口 如果添加–ipchost --nethost 会和-p冲突 # --device用于控制…...
浅谈Vue3——父子组件传值
引言 Vue.js是一款流行的JavaScript框架,用于构建用户界面。它提供了一种简洁、灵活的方式来管理和渲染数据。在Vue3中,父子组件之间的数据传递是一个常见的需求。本文将介绍如何在Vue3中传递对象,并且在子组件中访问和修改父组件对象中的属…...
Wolfram语言之父:ChatGPT到底能做什么? | 阿Q送书第六期
文章目录 那么,ChatGPT到底在做什么?它为什么能做到这些?前方的路为ChatGPT赋予“思想”留言提前获赠书 人类语言及其背后的思维模式在结构上比我们想象的更简单、更“符合规律”。 ChatGPT大火,甚至已经开始改变人类的工作和思考…...
antd a-list 添加分页
会分为三部分 template <a-list item-layout"horizontal" :data-source"localData" :pagination"{...paginationProps,current:currentPage}"><a-list-item slot"renderItem" slot-scope"item"><a-list-ite…...
MySQL注入绕安全狗脚本 -- MySQLByPassForSafeDog,以及端口爆破工具 -- PortBrute配置使用
工具介绍 此Tamper仅仅适用于MySQL数据库,在SQLMap使用过程中添加参数–tamperMySQLByPassForSafeDog。 安装与使用 1、安装网站安全狗Apache最新版 2、启用安全狗,不加MySQLByPassForSafeDog绕狗Tamper: python sqlmap.py -u "http://192.168.…...
R语言绘制热图
1、初步绘图 rm(listls())#clear Global Environment setwd(D:/Desktop/0000/code-main/热图)#设置工作路径#加载R包 library (pheatmap) #读取数据 df <- read.table(file"data.txt",sep"\t",row.names 1, headerT,check.namesFALSE) #查看前3行 hea…...
jmeter线程组 bzm - Concurrency Thread Group 阶梯式压测
简介 bzm - Concurrency Thread Group 不是JMeter的官方插件,而是一种由Blazemeter提供的高级线程组插件,它提供了更灵活的并发性能测试设置。它可以在不同的时间内并发执行不同数量的线程,模拟不同的负载场景。 插件下载地址(jme…...
西南偏南音乐节:人工智能融入生活的喜与忧
【人工智能:艺术创作的新挑战与新机遇】在西南偏南音乐节上,人工智能与艺术的融合成为了热门话题。喵狼的文斯卡德卢贝克(Vince Kadlubek)认为,人工智能无限的创意工具随着时间推移会变得无趣,而有目的的艺…...
OpenClaw高消耗场景优化:Qwen3-32B私有镜像成本实测
OpenClaw高消耗场景优化:Qwen3-32B私有镜像成本实测 1. 问题背景与测试动机 最近在尝试用OpenClaw自动化处理我的日常工作流时,发现一个令人头疼的问题:长链条任务的Token消耗简直像开了水龙头一样。最夸张的一次,一个简单的&qu…...
Cogito-V1-Preview-Llama-3B开发:微信小程序智能客服对接实战
Cogito-V1-Preview-Llama-3B开发:微信小程序智能客服对接实战 最近有不少朋友在问,把大模型部署到服务器上之后,怎么才能让微信小程序用起来?今天我就以星图GPU平台上部署的Cogito-V1-Preview-Llama-3B模型为例,跟大家…...
香橙派OrangePi One到手必做:Linux系统首次启动自动扩容rootfs的保姆级验证指南
香橙派OrangePi One开箱指南:首次启动自动扩容rootfs的完整验证流程 第一次拿到香橙派开发板时,最让人困惑的莫过于如何确认系统是否成功利用了TF卡的全部空间。作为嵌入式Linux新手,我清楚地记得自己第一次启动OrangePi One时的忐忑——那些…...
华三路由器远程管理全攻略:Telnet/SSH/FTP三种方式配置避坑指南
华三路由器远程管理全攻略:Telnet/SSH/FTP三种方式配置避坑指南 当你面对一台全新的华三路由器时,远程管理配置往往是第一个需要解决的问题。作为运维人员,我们既需要考虑操作便捷性,又必须兼顾安全性。本文将带你深入探索Telnet、…...
STM32duino S2-LP无线驱动库:Sub-1GHz低功耗可靠通信实现
1. 项目概述STM32duino X-NUCLEO-S2868A2 是一款面向 STM32 平台的 Arduino 兼容库,专为驱动意法半导体(STMicroelectronics)推出的 X-NUCLEO-S2868A2 扩展板而设计。该扩展板核心搭载 S2-LP 超低功耗 Sub-1GHz 射频收发器芯片(型…...
深入解析串口通信:从RS232到RS485的工业应用实战
1. 串口通信的工业应用基础 第一次接触工业自动化项目时,我被现场密密麻麻的线缆搞得头晕眼花。直到老师傅指着角落里不起眼的两根双绞线说:"这条RS485总线控制着整条生产线的30台设备",我才意识到串口通信在工业领域的强大之处。 …...
Android Perfetto 系列 6:为什么是 120Hz?高刷新率的优势与挑战
Android Perfetto 系列 6:为什么是 120Hz?高刷新率的优势与挑战本文是 Android Perfetto 系列的第六篇,主要介绍 Android 设备上 120Hz 刷新率的相关知识。如今,120Hz 已成为 Android 旗舰手机的标配,本文将讨论高刷新…...
基于西门子PLC的矿井通风控制系统(含IO表、PLC引脚图、程序) PLC程序设计,价格便宜
基于西门子PLC的矿井通风控制系统(含IO表、PLC引脚图、程序) PLC程序设计,价格便宜,plc触摸屏上位机程序设计,编写。 西门子plc仿真程序设计 提供程序说明, plc程序代写 PLC程序设计、代做 图片为案例 接设…...
揭秘联发科设备Bootloader解锁:mtkclient-gui实战指南与深度解析
揭秘联发科设备Bootloader解锁:mtkclient-gui实战指南与深度解析 【免费下载链接】mtkclient-gui GUI tool for unlocking bootloader and bypassing authorization on Mediatek devices (Not maintained anymore) 项目地址: https://gitcode.com/gh_mirrors/mt/m…...
