枣庄同城游戏大厅下载:Flask 请求中间件、错误处理、标签、过滤器、CBV
admin/2020-03-20/ 分类:科技/阅读:
目录
- 一、请求中间件
- 二、请求中间件额外方法(重写源码)
- 三、请求错误处理
- 四、请求标签、过滤器
- 五、CBV写法
- 基础版
- 常用版
一、请求中间件
中间件:
1 before_first_request 当项目启动后,接收到的第一个请求,就会执行before_first_request装饰的函数,执行顺序也是谁先注册就谁先执行 2 before_request 请求没有经过响应函数的时候,会执行before_request装饰的函数,谁先注册谁先执行。只要有一个函数有返回值,后面的所有before_request都不会执行,且响应函数也不会执行。其有没有返回值都不会影响after_request的执行 3 after_request是再before_request与响应函数执行后执行。他必须接收响应参数,并且要把响应返回。执行顺序是谁先注册后执行。
使用
from flask import Flask, request app = Flask(__name__) # 执行顺序:1-2-3-5-4 # 1.整个项目的第一次 @app.before_first_request def first(): print('我的第一次') # 2.响应函数之前执行,先注册先执行 @app.before_request def beforel(): print('我是before1') # 3.响应函数之前执行,先注册先执行 @app.before_request def before2(): print('我是before2') # 5.响应函数之后执行,先注册后执行 @app.after_request def after1(response): print('响应后的参数2', response) print('after1') return response # 4.响应函数之后执行,先注册后执行 @app.after_request def after2(response): print('响应后的参数1', response) print('after2') return response @app.route('/') def index(): return "ok" if __name__ == '__main__': app.run()
二、请求中间件额外方法(重写源码)
##了解的知识点 from flask import Flask app = Flask(__name__) class MyMiddleware: def __init__(self,old_wsgi_app): self.old_wsgi_app =old_wsgi_app def __call__(self, environ, start_response): #这befor的befor print("响应函数开始之前干的事情") ret = self.old_wsgi_app(environ, start_response) #这是after的after print("结束函数结束之后干的事情") return ret @app.route("/") def index(): return "ok" if __name__ == '__main__': app.wsgi_app = MyMiddleware(app.wsgi_app) app.run()
三、请求错误处理
1 teardown_request,一旦遇到错误就会执行,并且把错误传递给teardown_request装饰的函数, 没有错误也会执行,但是是错误为None,他并不能处理错误,只能记录 2 errorhandle 可以捕获错误,并且对错误做出响应,返回给用户,如果你要用errorhandler你必须指定他捕获哪种类型的错误,就必须传错误码,然后就返回值,返回给用户
# 遇到错误就执行 @app.teardown_request def tear(e): print(e) print('我是teardown') # 捕获错误,传错误码 @app.errorhandler(500) def error_500(e): print(e) return '程序已崩500' # 捕获错误,传错误码 @app.errorhandler(404) def error_500(e): print(e) return '程序已崩404' @app.route('/') def index(): return render_template('index1.html') if __name__ == '__main__': app.run()
四、请求标签、过滤器
# 相当于一个函数,可以在页面中使用它,要加括号 # 相当于django中的标签 @app.template_global() def get_sum(a,b): return a b # django中的过滤器 @app.template_filter() def get_something(a,b,c,d): return a b c d @app.route('/') def index(): return render_template('index1.html') if __name__ == '__main__': app.run()
index1.html 使用
<body> <h1>index1页面</h1> {{get_sum(1,1)}} {{1|get_something(1,1,1)}} </body>
五、CBV写法
基础版
from flask import Flask,views,url_for app = Flask(__name__) def tt(func): def inner(*args,**kwargs): print("你追到我。。") rv = func(*args,**kwargs) print("嘿嘿嘿。。。") return rv return inner class Index(views.View): methods = ["GET"] #规定哪些请求方式可以请求我这个路由 decorators =[tt,] #这个是给 我们的响应添加装饰器 def dispatch_request(self): return "ojbk" app.add_url_rule("/index",view_func=Index.as_view(name="index"),endpoint="index1") # 1 为什么要给as_view传递name= "index", # 2 他作用Index.as_view(name="index")他返回是的view这个函数对象,我们传递name="index"是给view的__name__改变名字。如果不传,我没有办法通过名字来找路由的映射关系,因为都是”view“
常用版
from flask import Flask,views,url_for app = Flask(__name__) def tt(func): def inner(*args,**kwargs): print("响应函数开始之前干的事情") rv = func(*args,**kwargs) print("结束函数结束之后干的事情") return rv return inner class Login(views.MethodView): methods = ["GET","POST"] # 规定哪些请求方式可以请求我这个路由 decorators = [tt, ] # 这个是给 我们的响应添加装饰器 def get(self): print(url_for("index1")) return "get" def post(self): return "post" app.add_url_rule("/login",view_func=Login.as_view(name="login")) #实现方法是重写了dispatch_request,通过请求方法,来找到当前类中的函数。 if __name__ == '__main__': app.run()
,申博Sunbet www.1888ss.com是最全面的网络生活服务平台,本着竭诚为您服务的宗旨,我们能够准确把握您的兴趣点,为您推荐海内外最热门的网络活动,内容涵盖了免费娱乐游戏,免费追剧,高收益投资等生活内容,不需注册可享VIP级服务,还有最权威的理财投资顾问,能迅速发现投资黄金区,不影响工作,不影响家庭,无需注册,变现方便,比上班轻松,比创业成功,投资就有回报,是高级金融财经人士都在用的理财高收益平台,每个聪明年轻人都在这里投资,另外,还有更多精彩等你发掘!
版权声明 本文仅代表作者观点,不代表本站立场。
本文系作者授权本站发表,未经许可,不得转载。
本文系作者授权本站发表,未经许可,不得转载。
TAG:
阅读: 扩展阅读:

推荐文章
Recommend article-
电银付大盟主(dianyinzhifu.com):谷歌苹果相继自研芯片,迫使传统芯片厂改推客制化
科技/阅读:159 -
usdt无需实名买卖(caibao.it):紧锣密鼓开展!中国空间站焦点舱明年春天将发射 后续另有天舟二号、神州十二号
科技/阅读:99 -
电银付app安装教程(dianyinzhifu.com):嫦娥五号月球样品入住“新家” 科学研究正式启幕
科技/阅读:67 -
景德镇二手房信息:苹果经典软件推荐: 1. 安全软件:不需要任何软件 2. 浏览器:Safari/alook 3. 密码管理:1Password/iCloud钥匙 4. 任务管理:Things 3 / Omnifocus / 2Do 5. 音乐: Appl
科技/阅读:91 -
长治卫校贴吧:阿里抗“疫”:从“数字基建”到平台式模板
科技/阅读:185 -
红米note9pro和红米k30哪个好 区别对比评测选谁好
科技/阅读:180

热门文章
HOT NEWS