Flask中的CBV以及正则表达式

一.CBV

def auth(func):
def inner(*args, **kwargs):
print('before')
result = func(*args, **kwargs)
print('after')
return result return inner class IndexView(views.View):
methods = ['GET']
decorators = [auth, ] def dispatch_request(self):
print('Index')
return 'Index!'
#如果不传name,这所有返回的都是view,这样就会报错,所有人家必须你要传递参数
#然后他传递给view_func的其实就是你视图类中的dispatch_request方法。这样我们没有办法,在一个视图类中写多种请求方式
app.add_url_rule('/index', view_func=IndexView.as_view(name='index')) # name=endpoint
#或者,通常用此方式
class IndexView(views.MethodView):
methods = ['GET']
#cbv添加装饰,用这个,我们看as_view中就知道了
decorators = [auth, ] def get(self):
return 'Index.GET' def post(self):
return 'Index.POST'
#如果我们继承了MethodView,他帮我们重写了,dispatch_request方法,他给我们做了一个分发,通过请求,来执行不同的函数
app.add_url_rule('/index', view_func=IndexView.as_view(name='index')) # name=endpoint

二.正则表达式

#1 写类,继承BaseConverter
#2 注册:app.url_map.converters['regex'] = RegexConverter
# 3 使用:@app.route('/index/<regex("\d+"):nid>') 正则表达式会当作第二个参数传递到类中
from flask import Flask, views, url_for
from werkzeug.routing import BaseConverter app = Flask(import_name=__name__) class RegexConverter(BaseConverter):
"""
自定义URL匹配正则表达式
"""
def __init__(self, map, regex):
super(RegexConverter, self).__init__(map)
self.regex = regex def to_python(self, value):
"""
路由匹配时,匹配成功后传递给视图函数中参数的值
"""
return int(value) def to_url(self, value):
"""
使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
"""
val = super(RegexConverter, self).to_url(value)
return val
# 添加到flask中
app.url_map.converters['regex'] = RegexConverter
@app.route('/index/<regex("\d+"):nid>') #这里是调用to_python方法.且先执行to_python再运行index函数
def index(nid):
print(url_for('index', nid='888')) #这里其实调用to_url方法
return 'Index' if __name__ == '__main__':
app.run()

最新文章

  1. 双系统win+ubuntu无法访问win的盘符
  2. git使用和理解之一(不含分支)
  3. JSBinding / Testing
  4. GJM : 数据结构 - 轻松看懂机器学习十大常用算法 [转载]
  5. 使用mybatis-generator自动生成model、dao、mapping文件
  6. 合并两个结构完全相同的DataTable
  7. 『TCP/IP详解——卷一:协议』读书笔记——05
  8. PNG文件
  9. js 函数声明方式以及javascript的历史
  10. NetBeans IDE 7.4 Beta版本build JavaFX时生成的可执行jar包执行时找不到依赖的jar包
  11. Awesome-awesome-awesome
  12. ASP.NET MVC 3 入门级常用设置、技巧和报错
  13. ANDROID_MARS学习笔记_S01_007Linear_layout嵌套与layout_weight的设置
  14. Excel 删除所有错误公式
  15. CSDN博客越来越垃圾了,到处放广告
  16. css常用的属性方法 上篇
  17. 一个简单的双向链表(C++实现)
  18. 20145236《网络对抗》进阶实验——64位Ubuntu 17.10.1 ROP攻击
  19. MySQL高性能优化系列-目录
  20. 什么是node

热门文章

  1. Android-隐藏app图标以及隐式启动
  2. 【第十篇】easyui-datagrid排序 (转)
  3. 本地代码上传至github
  4. java生成随机验证码图片
  5. springboot---redis缓存的使用
  6. django模型层之多表关系
  7. 游戏设计模式——Unity对象池
  8. Java连载35-类总结、空指针异常
  9. Object的wait、notify和notifyAll
  10. android实现emoji输入