当前位置: 首页 > news >正文

Flask g对象和插件

四、Flask进阶

1. Flask插件

I. flask-caching

  • 安装

    pip install flask-caching
    
  • 初始化

    from flask_cache import Cache
    cache = Cache(config=('CACHE_TYPE':"simple"
    ))
    cache.init_app(app=app)
    
  • 使用
    在视图函数上添加缓存

    @blue.route("/")
    @cache.cached(timeout=30)
    def home():print("加载数据")return "home
    

2. 钩子(中间件Middleware)

  • 什么是钩子(中间件Middleware)

    钩子或叫钩子函数,是指在执行函数和目标函数之间挂载的函数,框架开发者给调用方提供一个point-挂载点,是一种AOP切面编程思想

  • 常用的钩子函数
    before_first_request: 处理第一次请求之前执行
    before_request:在每次请求之前执行,通常使用这个钩子函数预处理一些变量,实现反爬等
    after_request:注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行.
    teardown_appcontext:当APP上下文被移除之后执行的函数,可以进行数据库的提交或者回滚

  • AOP反爬策略

    # 利用缓存反爬,相同ip地址1秒内不允许重复访问
    key = requestremote addr + "before"
    value = cache.get(key)
    if value:return小伙子,别爬了
    else:cache.set(key,"aa',timeout=1)
    #反爬,防止非浏览器访问
    ua= request.user_agent # 用户代理
    if not ua:return "hello"# abort(400) # 可以抛出错误给用户
    

3. Flask内置对象

I. g

  • global全局对象
  • g对象是专门用来保存用户的数据的
  • g对象在一次请求中的所有的代码的地方,都是可以使用的
  • 突破变量存储位置限制,为数据传递添加了新的方式,比如我们在before_request产生一个数据在后面需要使用,可以保存在g对象中,在其他视图函数中就可以使用这个数据

II. request

请求对象,可以获取客户端提交过来的所有请求信息

III. session

会话技术,服务端会话技术的接口

current_app:

app的配置信息,app对象获取, current_app使用获取当前app需要注意,一定要在程序初始化完成之后

4. 配置templates和static

如果想要修改templates模板目录或static静态目录,可以自己配置

  • settings.py文件中添加BASEDIR:

    import os
    BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    

    __init__.py文件中添加static路径和templates路径:

    static_path = os.path.join(settings.BASE_DIR,'static')
    template_path = os.path.join(settings.BASE_DIR,'templates')
    app = Flask(__name__, static_folder=static_path, template_folder=template_path)
    

    在views.py文件中访问模板:

    @blue.route('/hello/')
    def hello():return render_template("hello.html")
    

    在模板中使用静态资源:

    <link rel="stylesheet" href="{{ url_for('static', filename='css/hello.css') }}">
    

相关文章:

Flask g对象和插件

四、Flask进阶 1. Flask插件 I. flask-caching 安装 pip install flask-caching初始化 from flask_cache import Cache cache Cache(config(CACHE_TYPE:"simple" )) cache.init_app(appapp)使用 在视图函数上添加缓存 blue.route("/") cache.cached(tim…...

26、Qt调用.py文件中的函数

一、开发环境 Qt5.12.0 Python3.7.8 64bit 二、使用 新建一个Qt项目&#xff0c;右击项目名称&#xff0c;选择“添加库” 选择“外部库”&#xff0c;点击“下一步” 点击“浏览”&#xff0c;选择Python安装目录下的libs文件夹中的“python37.lib”文件&#xff0c;点击“下…...

计算机网络实验一 网线制作

实验目的与要求&#xff1a; 实验目的 了解以太网网线&#xff08;双绞线&#xff09;和制作方法 实验内容 了解网线和水晶头 学习网线制作方法 实验环境和要求 网线 水晶头 压线钳 剥线钳 网线测试器 方法、步骤&#xff1a; 步骤一 准备工具和材料 步骤二 剥掉双绞线的外…...

android TextView 实现富文本显示

android TextView 实现富文本显示&#xff0c;实现抖音直播间公屏消息案例 使用&#xff1a; val tvContent: TextView helper.getView(R.id.tvContent)//自己根据UI业务要求&#xff0c;可以控制 图标显示 大小val levelLabel MyImgLabel( bitmap 自己业务上的bitmap )va…...

Linux常用命令(超详细)

一、基本命令 1.1 关机和重启 关机 shutdown -h now 立刻关机 shutdown -h 5 5分钟后关机 poweroff 立刻关机 重启 shutdown -r now 立刻重启 shutdown -r 5 5分钟后重启 reboot 立刻重启 1.2 帮助命令 –help命令 shutdown --help&#xff1a; ifconfig --help&#xff1a;查看…...

软考笔记--基于架构的软件开发方法

一.体系架构的设计方法概述 基于体系结构的软件设计方法ABSD是由体系结构驱动的&#xff0c;即指有构成体系结构的商业、质量和功能需求的组合驱动的。ABSD方法有3个基础。第1个基础是功能的分解。在功能分解中&#xff0c;ABSD方法使用已有的基于模块的内聚和耦合技术。第2个…...

CSS 盒子模型(box model)

概念 所有HTML元素可以看作盒子&#xff0c;在CSS中&#xff0c;"box model"这一术语是用来设计和布局时使用CSS盒模型本质上是一个盒子&#xff0c;封装周围的HTML元素&#xff0c;它包括&#xff1a;外边距(margin)&#xff0c;边框(border)&#xff0c;内边距(pad…...

基于springboot+vue的在线考试系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…...

001 概述

什么是API API&#xff08;Application Programming Interface,应用程序编程接口&#xff09;是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细节。为了…...

linux环境下nginx的配置文件

根据指定的域名进行反向代理转发&#xff0c;实现负载均衡 Nginx的upstream支持如下六种方式的分配算法&#xff0c;分别是&#xff1a; 轮询 默认方式 weight 权重方式 ip_hash 依据ip分配方式 least_conn 依据最少连接方式 url_hash 依据URL分配方式 fair 依据响应时间…...

AcWing:1236. 递增三元组

给定三个整数数组 A[A1,A2,…AN] B[B1,B2,…BN] C[C1,C2,…CN] 请你统计有多少个三元组 (i,j,k) 满足&#xff1a; 1≤i,j,k≤NAi<Bj<Ck 输入格式 第一行包含一个整数 N。 第二行包含 N 个整数 A1,A2,…AN。 第三行包含 N 个整数 B1,B2,…BN。 第四行包含 N 个整…...

关于并网继电器的继电器自检逻辑及实现方式

需求 对于常规的光伏并网逆变器来说&#xff0c;继电器控制至关重要。继电器一般位于逆变电感后&#xff0c;共模电感前&#xff0c;用于将逆变电压与电网电压脱开&#xff0c;一般国外有双继电器的安规强制认证要求&#xff0c;国内目前只需要单继电器要求&#xff08;后续应…...

Spring中的事务和事务的传播机制

事务是一组操作的集合&#xff0c;不可以被分割。事务会把所有的操作作为一个整体&#xff0c;这组操作要么全部成功&#xff0c;要么全部失败。 事务有三种操作&#xff1a; 开启事务&#xff1b;提交事务&#xff1b;回滚事务。 如果代码的执行逻辑是这样&#xff1a; 开…...

前端【技术类】资源学习网站整理(那些年的小网站)

学习网站整理 值得分享的视频博主&#xff1a;学习网站链接 百度首页的资源收藏里的截图&#xff08;排列顺序没有任何意义&#xff0c;随性而已~&#xff09;&#xff0c;可根据我标注的关键词百度搜索到这些网站呀&#xff0c;本篇末尾会一一列出来&#xff0c;供大家学习呀 …...

MySQL——存储引擎

存储引擎 InnoDB 是 MySQL 默认的存储引擎&#xff0c;只有在需要它不支持的特性时&#xff0c;才会考虑其他存储引擎 实现了 4 个标准的隔离级别&#xff0c;默认级别可重复度。在可重复度隔离级别下&#xff0c;通过 MVCC 间隙锁防止幻读 主索引是聚簇索引 内部做了很多…...

YoloV8改进策略:Block改进|MogaNet——高效的多阶门控聚合网络

文章目录 摘要论文:《MogaNet——高效的多阶门控聚合网络》1、简介2、相关工作2.1、视觉Transformers2.2、ViT时代的卷积网络3、从多阶博弈论交互的角度看表示瓶颈4、方法论4.1、MogaNet概述4.2、多阶门控聚合4.3、通过通道聚合进行多阶特征重新分配4.4、实现细节5、实验5.1、…...

关于vue3使用prop传动态参数时父子数据不同步更新问题

子: <template><div><h3>子组件</h3><input :value"modelValue" input"$emit(update:modelValue, $event.target.value)"></div> </template><script setup> import { defineProps, defineEmits } from …...

招投标系统:从线下招标到高效数字化

随着科技的不断进步&#xff0c;越来越多的企业开始意识到传统的线下招标方式存在的种种限制&#xff0c;并积极转向电子招投标系统。这一趋势的兴起不仅是数字化转型的必然选择&#xff0c;更是企业提高效率、降低成本的有效途径。 招投标系统的定义与作用 招投标系统是一种…...

day08_分类品牌管理商品规格管理商品管理

文章目录 1 分类品牌管理1.1 菜单添加1.2 表结构介绍1.3 页面制作1.4 品牌列表加载1.4.1 后端接口BrandControllerBrandServiceBrandMapperBrandMapper.xml 1.4.2 前端对接brand.jscategoryBrand.vue 1.5 分类数据加载1.6 列表查询1.6.1 需求说明1.6.2 后端接口需求分析Categor…...

手写分布式配置中心(二)实现分布式配置中心的简单版本

这一篇文章比较简单&#xff0c;就是一个增删改查的服务端和一个获取配置的客户端&#xff0c;旨在搭建一个简单的配置中心架构&#xff0c;代码在 https://gitee.com/summer-cat001/config-center 服务端 服务端选择用springboot 2.7.14搭建&#xff0c;设计了4个接口/confi…...

别再忍受小窗口了!手把手教你给Ubuntu虚拟机装VMware Tools实现完美全屏

告别局促视界&#xff1a;Ubuntu虚拟机全屏显示的终极解决方案 第一次在VMware里启动Ubuntu时&#xff0c;那个缩在屏幕一角的小窗口简直像被关在笼子里的鸟——明明有广阔的显示空间&#xff0c;却只能蜷缩着操作。拖动文件得来回滚动&#xff0c;阅读文档要不断放大&#xff…...

SDMatte+在影视后期应用:绿幕替代方案探索、道具透明化处理与VFX资产快速提取

SDMatte在影视后期应用&#xff1a;绿幕替代方案探索、道具透明化处理与VFX资产快速提取 1. 影视后期中的抠图挑战 在影视后期制作中&#xff0c;高质量的抠图技术是视觉特效(VFX)的基础。传统绿幕拍摄虽然成熟&#xff0c;但存在诸多限制&#xff1a; 需要专门的拍摄场地和…...

Net/Net Core微信公众号上传图片永久图片素材和内容中图片素材不能用MultipartFormDataContent的坑

测试了N次&#xff0c;不能用net自带的 MultipartFormDataContent&#xff0c;否则微信公众号会一直报错41005错误&#xff0c;具体原因不详&#xff0c;只能拼装head字符串实现&#xff0c;下面是封装好的上传永久素材和临时图片素材的方法&#xff0c;下面为测试好的代码&…...

探索NextDNS Config:优化你的DNS配置以提升网络性能

探索NextDNS Config&#xff1a;优化你的DNS配置以提升网络性能 是一个开源项目&#xff0c;旨在帮助用户轻松地管理并优化其设备上的NextDNS设置。该项目由Yokoffing开发&#xff0c;并提供了多种平台&#xff08;包括路由器、Android和iOS&#xff09;的配置文件&#xff0c;…...

探索高压柔性输电系统中6脉冲与12脉冲晶闸管控制HVDC仿真模型

高压柔性输电系统6脉冲&#xff0c;12脉冲晶闸管控制HVDC的仿真模型&#xff0c;说明文档在电力传输领域&#xff0c;高压柔性输电系统&#xff08;HVDC&#xff09;以其高效、灵活等特性占据着重要地位。其中&#xff0c;6脉冲和12脉冲晶闸管控制的HVDC仿真模型更是关键部分&a…...

OpenClaw安全实践:Kimi-VL-A3B-Thinking本地化部署的数据边界保障

OpenClaw安全实践&#xff1a;Kimi-VL-A3B-Thinking本地化部署的数据边界保障 1. 为什么选择本地化部署&#xff1f; 去年夏天&#xff0c;我接手了一个医疗影像分析项目&#xff0c;需要处理大量患者CT扫描图像和诊断报告。最初尝试使用公有云API服务时&#xff0c;每次上传…...

OpenClaw与Qwen3-14b_int4_awq联动:低成本实现个人自动化办公

OpenClaw与Qwen3-14b_int4_awq联动&#xff1a;低成本实现个人自动化办公 1. 为什么选择OpenClawQwen3-14b_int4_awq组合 去年夏天&#xff0c;当我第一次尝试用AI自动化处理周报时&#xff0c;发现商业API的token消耗速度远超预期——生成5份周报就花掉了近50元。这促使我开…...

三相离网逆变器在不对称负载下的正负序控制Matlab仿真探索

三相离网逆变器在不对称负载下的正负序控制matlab仿真: 1不对称控制包括: 正序分量处理负序分量处理正序控制环负序控制环&#xff1b; 2正序控制换路与负序控制换路都采用dq轴上的电容电压外环电感电流内环控制&#xff1b; 3直流电压Vdc700V&#xff0c;总功率15kW&#xff…...

嵌入式LED闪烁控制库Blinker工程实践指南

1. Blinker&#xff1a;嵌入式LED闪烁控制库的工程化实现解析Blinker并非一个广为人知的通用开源库&#xff0c;其项目摘要“Simple library for LED blinking”与关键词“blinking, led”表明这是一个高度聚焦、轻量级的底层驱动组件。在嵌入式系统开发中&#xff0c;“LED闪烁…...

植物基肉类替代品市场的增长与投资机会

植物基肉类替代品市场的增长与投资机会 关键词:植物基肉类替代品、市场增长、投资机会、消费趋势、行业发展 摘要:本文聚焦于植物基肉类替代品市场,深入分析其市场增长的驱动因素、现状及未来趋势,同时探讨了该领域蕴含的投资机会。通过对核心概念的阐释、相关算法原理的介…...