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 socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
Jun 23 Python
python 生成器生成杨辉三角的方法(必看)
Apr 10 Python
Python使用正则表达式实现文本替换的方法
Apr 18 Python
Python读取word文本操作详解
Jan 22 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
Django高级编程之自定义Field实现多语言
Jul 02 Python
Windows10下 python3.7 安装 facenet的教程
Sep 10 Python
Python数据可视化:箱线图多种库画法
Nov 06 Python
PyTorch中topk函数的用法详解
Jan 02 Python
Python smtp邮件发送模块用法教程
Jun 15 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 curl 伪造IP来源的实例代码
2012/11/01 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
javascript制作sql转换为stringBuffer的小工具
2015/04/03 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
2016/01/14 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
Python 可爱的大小写
2008/09/06 Python
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
2017/12/18 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
python解析yaml文件过程详解
2019/08/30 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
自我推荐书
2013/12/04 职场文书
教师绩效考核方案
2014/01/21 职场文书
《北大荒的秋天》教学反思
2014/04/14 职场文书
三严三实学习心得体会
2014/10/13 职场文书
检讨书范文2000字
2015/01/28 职场文书
2015年全国“爱牙日”宣传活动总结
2015/03/23 职场文书
飞越疯人院观后感
2015/06/09 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
Hive导入csv文件示例
2022/06/25 数据库