圆月山庄资源网 Design By www.vgjia.com
本文实例讲述了Flask框架实现给视图函数增加装饰器操作。分享给大家供大家参考,具体如下:
在@app.route
的情况下增加装饰器的写法:
from flask import Flask,request,render_template,redirect,session,url_for,views from flask import render_template app = Flask(__name__) #实例化flask对象 app.debug = True #能够随时更改自动重启,不加的话每次更改代码需要手动重启 app.config['SECRET_KEY'] = '123456' #secret_key,用于给session加密 @app.route('/login',methods=['GET','POST'],endpoint='t1') #endpoint是url的别名,相当于django中Url的name def login(): if request.method == "GET": # res = request.query_string # print(res) 获取通过GET请求url传过来的参数 return render_template('login.html') else: user = request.form.get('user') pwd = request.form.get('pwd') if user == 'tom' and pwd == '123': session['userinfo'] = user #设置session return render_template('hello.html') return render_template('login.html', error='用户名或密码错误') def wapper(func): def inner(*args,**kwargs): user = session.get('user_info') if not user: return redirect('/login') return func(*args,**kwargs) return inner @app.route('/detail/<int:nid>',methods=['GET'],endpoint='n1') @wapper def detail(nid): print(nid) return render_template('hello.html') ''' 如果给一个视图函数增加装饰器,应该加在app.route下面,这样的效果就是, 装饰器将下面的所有内容包裹,然后路由对应到这大的包裹中来。 需要注意endpoint要注明,如果不注明endpoint则默认用函数名来定义, 此时所有的函数名都叫inner了,所以需要注明endpoint,只是为了区分。 ''' if __name__ == '__main__': app.run()
另一种写法:
import functools def wapper(func): @functools.wraps(func) def inner(*args,**kwargs): return func(*args,**kwargs) return inner ''' functools.wraps()相当于保留元信息 说白了就是,如果不加这个装饰器,那么你打印detail的__name__它就是inner了, 因为加了装饰器,效果等同于inner=inner(detail()), 如果在装饰器中加了functools这个装饰器,那么相当于给__name__重新赋值,inner.__name__ = func.__name_- 其函数的名字得以保留。 ''' @wapper def detail(): pass print(detail.__name__)
flask的get_flashed_messages,flash
from flask import Flask,get_flashed_messages,flash app = Flask(__name__) app.secret_key = 'asdf' @app.route('/get') def get(): data = get_flashed_messages() print(data) return 'Hello world' @app.route('/set') def set(): flash('info info') ''' 闪现效果,相当于set视图函数执行2次,会在一个列表中存储两个flash函数的内容, 当执行get_flashed_messages的时候则会取出该列表,并清空,类似字典的Pop。 具体用处不大。。。 ''' return 'Hello world' if __name__ == '__main__': app.run()
flash还可以通过category参数给Flash内容归类,通过不同类别取不同内容。
更多关于Python相关内容可查看本站专题:《Python入门与进阶经典教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
标签:
Flask框架,视图函数,装饰器
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2024年11月07日
2024年11月07日
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]