当前位置: 首页 > 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') }}">
    

相关文章:

  • 手写分布式配置中心(二)实现分布式配置中心的简单版本
  • 美摄科技实时语音数字人解决方案
  • Vue+OpenLayers7入门到实战目录
  • python--产品篇--游戏-坦克
  • Combining Buffered I/O and Direct I/O in Distributed File Systems——论文泛读
  • 环境配置、如何安装OpenHarmony HAR
  • 一次电脑感染Synaptics Pointing Device Driver病毒的经历,分享下经验
  • Java 面试题
  • 前端 WebSocket 的一些使用
  • 【Spring底层原理高级进阶】Spring Kafka:实时数据流处理,让业务风起云涌!️
  • 实战解析:打造风控特征变量平台,赋能数据驱动决策
  • Python - getpass
  • 线上问题——学习记录幂等判断失效问题分析
  • Git快速入门
  • 回溯算法01-组合(Java)
  • Android Studio:GIT提交项目到远程仓库
  • Angular2开发踩坑系列-生产环境编译
  • Angular4 模板式表单用法以及验证
  • crontab执行失败的多种原因
  • extjs4学习之配置
  • MYSQL 的 IF 函数
  • mysql常用命令汇总
  • orm2 中文文档 3.1 模型属性
  • PAT A1050
  • PermissionScope Swift4 兼容问题
  • React as a UI Runtime(五、列表)
  • Redux 中间件分析
  • Sass Day-01
  • SpringBoot几种定时任务的实现方式
  • webgl (原生)基础入门指南【一】
  • 服务器从安装到部署全过程(二)
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 微信小程序设置上一页数据
  • 自制字幕遮挡器
  • 大数据全解:定义、价值及挑战
  • 如何正确理解,内页权重高于首页?
  • !!Dom4j 学习笔记
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (AngularJS)Angular 控制器之间通信初探
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (十)T检验-第一部分
  • (一) springboot详细介绍
  • (原創) 未来三学期想要修的课 (日記)
  • (转载)hibernate缓存
  • .gitignore文件---让git自动忽略指定文件
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .net FrameWork简介,数组,枚举
  • .net6 webapi log4net完整配置使用流程
  • .NET开源快速、强大、免费的电子表格组件
  • .NET中的Exception处理(C#)