会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132376个问题
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 7862楼
JAVA 全系列/第六阶段:项目管理与SSM框架/Mybatis 7863楼
JAVA 全系列/第六阶段:项目管理与SSM框架/Mybatis 7864楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/XML 技术(旧) 7865楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 7866楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 7870楼

flask_shop.zip

老师这是我的代码 你看下 一直报错蓝图导入失败 418fe2c10d632382ef79a628f7524ba.png

Python 全系列/第十阶段:Flask百战电商后台项目/Flask百战电商后台项目 7871楼


# before_render_template的应用 
#示例业务  加载视图之前  我们对数据过滤  屏蔽一些非法字符 的示例

#引用before_render_template  我们待会儿要用这个变量!来监听我们的逻辑函数   也就是在视图渲染之前把数据完成过滤
from flask import Flask,render_template,before_render_template,g

app=Flask(__name__)

#正常访问首页 
@app.route('/')
def index():
    # data()   #这里注册的data函数 是同样的功能  
    return render_template('index.html')

def filer_msg(sender,template,context): #过滤信息函数    #曹操 中操非法! 把操换成*
# def data():
    #比如我们获取数据 加入到了g中    这里简单拿一个字符串测试 
    g.msg='曹操不啰嗦,一心要拿荆州!'
    #这里课堂老师说 他会自动调用 before_render_template.send()  方法 
    #所以不需要我们去写了
    msg=g.get('msg')  
    if msg:
        g.msg = msg.replace('操', '*')  # 把操这个字符换成* 曹操非法了!  不准拿荆州!

# before_render_template.connect(filer_msg)  #执行信号监听   回调函数 在视图渲染前执行我们的逻辑!

@app.route('/home/')
def home():
    # data()
    return render_template('home.html')
#得到结果 是在home函数视图里面 曹操也被过滤了 



if __name__=='__main__':
    app.run(debug=True)


'''
html中调用
<body>
    <p>{{ g.msg }}</p>    
</body>
显示结果:  曹*不啰嗦,一心要拿荆州!  

#吐槽 可怜的曹操  名字都非法
'''


#总结 其实我们的数据过滤方法 放在任意一个函数里面 比如我们注释的上面的data() 
#但是每次视图渲染之前 都要调用data()这个函数 太麻烦了 
# 所以选择用flask给我们提供的 视图渲染之前的钩子信号! 
 一次性帮我们解决了所有视图渲染之前的数据过滤
 
 
我的理解是 before_render_template这个钩子 
视图渲染之前  相当于是vue中的DOM加载之前的生命周期函数beforMount
所以用法也往这个上面靠。






Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask高级 7872楼
Python 全系列/第一阶段:Python入门/编程基本概念 7873楼
Python 全系列/第四阶段:函数式编程和核心特性/生成器和装饰器 7874楼
WEB前端全系列/第二阶段:JavaScript编程模块/浏览器模型(BOM) 7875楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637