Flask框架实现给视图函数增加装饰器操作示例


Posted in Python onJuly 16, 2018

本文实例讲述了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程序设计有所帮助。

Python 相关文章推荐
python实现数通设备tftp备份配置文件示例
Apr 02 Python
用Python制作在地图上模拟瘟疫扩散的Gif图
Mar 31 Python
用Python编写简单的微博爬虫
Mar 04 Python
win10下tensorflow和matplotlib安装教程
Sep 19 Python
解决python3捕获cx_oracle抛出的异常错误问题
Oct 18 Python
python3 爬取图片的实例代码
Nov 06 Python
python实现三次样条插值
Dec 17 Python
Python qqbot 实现qq机器人的示例代码
Jul 11 Python
浅析python redis的连接及相关操作
Nov 07 Python
关于Pytorch的MNIST数据集的预处理详解
Jan 10 Python
python集成开发环境配置(pycharm)
Feb 14 Python
python try...finally...的实现方法
Nov 25 Python
flask框架使用orm连接数据库的方法示例
Jul 16 #Python
flask框架实现连接sqlite3数据库的方法分析
Jul 16 #Python
Sanic框架异常处理与中间件操作实例分析
Jul 16 #Python
对pycharm代码整体左移和右移缩进快捷键的介绍
Jul 16 #Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 #Python
Sanic框架请求与响应实例分析
Jul 16 #Python
解决Python 中英文混输格式对齐的问题
Jul 16 #Python
You might like
PHP中的float类型使用说明
2010/07/27 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
非常实用的php弹出错误警告函数扩展性强
2014/01/17 PHP
php按单词截取字符串的方法
2015/04/07 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
详解js闭包
2014/09/02 Javascript
node.js中的buffer.slice方法使用说明
2014/12/10 Javascript
老生常谈遮罩层 滚动条的问题
2016/04/29 Javascript
js实现右键菜单功能
2016/11/28 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
node.js中express-session配置项详解
2017/05/31 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
详解AngularJS 过滤器的使用
2018/06/02 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
nodejs中内置模块fs,path常见的用法说明
2020/11/07 NodeJs
解析Python中的二进制位运算符
2015/05/13 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
python flask中静态文件的管理方法
2018/03/20 Python
python遍历文件目录、批量处理同类文件
2019/08/31 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
房产委托公证书
2014/04/08 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
公司保密管理制度
2015/08/04 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python
canvas绘制折线路径动画实现
2021/05/12 Javascript
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android