Flask-- (八) Flask-中间件

1、中间件

可以全局的控制请求和响应

Flask的中间件在蓝图中提供了封装好的装饰器,直接使用即可,开发者也可以自定义全局装饰器

全局装饰器

装饰器描述
before_request有返回值,就地返回,不执行视图。 不写返回值(return),或者return None,再执行视图
after_request必须有返回值
template_global装饰器函数直接在模板中可以以变量全局使用
template_filter装饰器函数直接在模板中可以以过滤器全局使用
1.1 使用蓝图提供的装饰器
# 调用蓝图的装饰器

@bule_print.add_app_template_global
def page_process():
    user_id = request.cookies.get("user_id")
    user = Person.query.get(int(user_id))
    result = {
        "username": user.nickname,
        "job": ""
    }
    job = user.person_job_map.j_name
    result["job"] = job
    return result

在项目中调用去全局变量

<li>欢迎您:{{ page_process().username }} {{ page_process().job }}</li>
1.2 自定义全局装饰器

创建的过程和过滤器很像

1.2.1 定义函数
from flask import session
from BluePrint.user.models import *


def middleware_template():
    # 数据
    data = {
        "show_subordinate": True,  # 是否显示下属考勤
        "show_news": True,  # 是否显示新闻管理
        "show_person": True,  # 是否显示职员管理
        "show_permission": True,  # 是否显示权限管理
    }
    # 当前用户
    username = session.get("username")
    person = Person.query.filter(Person.username == username).first()
    # 新闻管理权限
    p_news = Permission.query.get(1)
    # 人事管理权限
    p_person = Permission.query.get(2)
    # 权限管理权限
    p_permission = Permission.query.get(4)

    data["show_subordinate"] = True if person.person_position_map.level > 1 else False  # 是否显示下属
    data["show_news"] = True if person.person_position_map in p_news.permission_position_map else False  # 是否显示新闻
    data["show_person"] = True if person.person_position_map in p_person.permission_position_map else False  # 是否显示职员管理
    data["show_permission"] = True if person.person_position_map in p_permission.permission_position_map else False  # 是否显示权限管理

    # 返回
    return data
1.2.2 注册
# app注册装饰器
from BluePrint.middleware import middleware_template
app.add_template_global(middleware_template, "middleware_template")
1.2.3 使用
{% if middleware_template().show_news %}
<li>
    <a href="/news"><i class="fa fa-envelope-o fa-fw"></i> 新闻管理</a>
</li>
{% endif %}

{% if middleware_template()["show_permission"] %}
<li>
    <a href="/permission"><i class="fa fa-table fa-fw"></i> 权限管理</a>
</li>
{% endif %}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值