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…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
