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解析最简单的验证码
Jan 07 Python
python字典的常用操作方法小结
May 16 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
Jul 01 Python
Python模块文件结构代码详解
Feb 03 Python
Python iter()函数用法实例分析
Mar 17 Python
解决python升级引起的pip执行错误的问题
Jun 12 Python
Spring Cloud Feign高级应用实例详解
Dec 10 Python
pytorch使用 to 进行类型转换方式
Jan 08 Python
python批量生成条形码的示例
Oct 10 Python
Python 的 f-string 可以连接字符串与数字的原因解析
Feb 20 Python
Python基础知识学习之类的继承
May 31 Python
python数字图像处理实现图像的形变与缩放
Jun 28 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
Laravel 4.2 中队列服务(queue)使用感受
2014/10/30 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
彻底搞懂PHP 变量结构体
2017/10/11 PHP
jquery select下拉框操作的一些说明
2010/04/02 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
Node.js+Express+Mysql 实现增删改查
2019/04/03 Javascript
koa2+vue实现登陆及登录状态判断
2019/08/15 Javascript
使用wxpython实现的一个简单图片浏览器实例
2014/07/10 Python
python中self原理实例分析
2015/04/30 Python
Python+MongoDB自增键值的简单实现
2016/11/04 Python
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
python里 super类的工作原理详解
2019/06/19 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
应届生法律求职信
2013/10/22 职场文书
企业统计员岗位职责
2013/12/13 职场文书
母亲80寿诞答谢词
2014/01/16 职场文书
银行优秀员工事迹
2014/02/06 职场文书
团代会主持词
2014/04/02 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
图解上海144收音机
2021/04/22 无线电