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 ORM框架SQLAlchemy学习笔记之安装和简单查询实例
Jun 10 Python
python执行get提交的方法
Apr 29 Python
Python中subprocess模块用法实例详解
May 20 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
简要讲解Python编程中线程的创建与锁的使用
Feb 28 Python
tensorflow训练中出现nan问题的解决
Feb 10 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
Mar 23 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
使用python实现离散时间傅里叶变换的方法
Sep 02 Python
Tensorflow不支持AVX2指令集的解决方法
Feb 03 Python
python实现无边框进度条的实例代码
Dec 30 Python
Python3 如何开启自带http服务
May 18 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遍历目录viewDir函数
2009/12/15 PHP
js脚本学习 比较实用的基础
2006/09/07 Javascript
基于jQuery实现自动轮播旋转木马特效
2015/11/02 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
js拖拽功能实现代码解析
2016/11/28 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
通过实践编写优雅的JavaScript代码
2019/05/30 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
Python实现批量执行同目录下的py文件方法
2019/01/11 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
Django文件上传与下载(FileFlid)
2019/10/06 Python
python创建子类的方法分析
2019/11/28 Python
Tensorflow 实现释放内存
2020/02/03 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
村优秀党员事迹材料
2014/01/15 职场文书
十八大闭幕感言
2014/01/22 职场文书
爱心活动计划书
2014/04/26 职场文书
大四毕业生自荐书
2014/07/05 职场文书
预备党员转正材料
2014/12/19 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
python入门之算法学习
2021/04/22 Python
Go语言中的UTF-8实现
2021/04/26 Golang
Nginx配置https的实现
2021/11/27 Servers
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android