Flask g对象和插件

本文介绍了Flask应用开发中高级功能,包括flask-caching插件的使用、钩子(中间件)的原理与反爬策略、Flask内置对象如g对象、request对象和session,以及如何配置templates和static文件夹。
摘要由CSDN通过智能技术生成

四、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') }}">
    
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘎嘎油

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值