Flask请求钩子 作者:马育民 • 2019-06-18 22:58 • 阅读:10304 # 概述 钩子,hook,在程序设计中,一种常见的方式,意思是:将函数挂在钩子上,当满足某条件时,系统就会自动调用该函数 在Flask中,有4中请求钩子: |请求钩子 |说明 | | ------------ | ------------ | |before_first_request |处理第一个请求前,执行某函数 | |before_request |处理每一个请求前,执行某函数 | |after_request|执行视图函数后,如果没有抛出异常,就执行某方法| |teardown_request|执行视图函数后,不论是否抛出异常,都执行某方法| 在Flask中,请求钩子是通过 **装饰器** 的形式实现的 ### 感性认识 ``` # 处理第一个请求前,执行此函数 @app.before_first_request def before_first_request(): print('before_first_request') # 处理每一个请求前,执行此函数 @app.before_request def before_request(): print('before_request') # 执行视图函数后,如果没有抛出异常,就执行此方法 @app.after_request def after_request(response): print('after_request',response) return response # 执行视图函数后,不论是否抛出异常,都执行此方法。 # 不能用debug模式启动服务 # 不能用debug模式启动服务 # 不能用debug模式启动服务 # 不能用debug模式启动服务 # 不能用debug模式启动服务 # 不能用debug模式启动服务 @app.teardown_request def teardown_request(response): print('teardown_request',response) return response ``` # 登录验证 最大的应用场景之一,就是登录验证: 比如在网上商城中,有一些操作,比如:收藏、购买、添加到购物车时,如果没有登录,就会显示登录界面 在实现这类功能时,需要在每个视图函数加上判断用户是否登录,如果没登录,就会跳转到登录界面,这种代码就显得冗余 可以采用请求钩子实现: 1. 获取请求路径,当请求路径必须是登录后才能访问的路径时,从session中取出用户信息 2. 如果有用户信息,说明已经登录,继续执行 3. 如果没有用户信息,说明没有登录,跳转到登录页面 ``` @app.before_request def before_request(): if request.path.find('/user')==0: userinfo=session.get('userinfo') if userinfo==None: return redirect('/static/login.html') ``` 原文出处:http://malaoshi.top/show_1EF3XZcuoucJ.html