先来普及下python装饰器,有装饰器带变量的,有装饰器不带变量

def  decor(func):print("这是最外层func函数")def wrapper(*args,**kwargs):print("内层装饰器函数")func(*args,**kwargs)return wrapper
@decor
def hello():print("小明要上课了")

这个运行结果

这是最外层func函数
def  decor(func):print("这是最外层func函数")def wrapper(*args,**kwargs):print("内层装饰器函数")func(*args,**kwargs)return wrapper
@decor
def hello():print("小明要上课了")
hello()

执行结果

这是最外层func函数
内层装饰器函数
小明要上课了

带有变量的装饰器

def first(a,b):print(f"变量a的值是{a}变量b的值是{b}")def wraper(func):def innerfun(*args,**kwargs):func(*args,**kwargs)print("这是最内层函数")return innerfunreturn wraper
@first(1,2)
def hello():print("小明要上课了")

运行结果

变量a的值是1变量b的值是2
def first(a,b):print(f"变量a的值是{a}变量b的值是{b}")def wraper(func):def innerfun(*args,**kwargs):func(*args,**kwargs)print("这是最内层函数")return innerfunreturn wraper
@first(1,2)
def hello():print("小明要上课了")
hello()

执行结果

变量a的值是1变量b的值是2
小明要上课了
这是最内层函数

第二种带有参数装饰器写法

def first(a,b):print(f"变量a的值是{a}变量b的值是{b}")def wraper(func):print("这个也是要执行的")return funcreturn wraper
@first(1,2)
def hello():print("小明要上课了")

执行结果

变量a的值是1变量b的值是2
这个也是要执行的

注意上面的warper函数执行了,函数使用了装饰器但是函数还没调用
执行函数:

def first(a,b):print(f"变量a的值是{a}变量b的值是{b}")def wraper(func):print("这个也是要执行的")return funcreturn wraper
@first(1,2)
def hello():print("小明要上课了")
hello()

执行结果

变量a的值是1变量b的值是2
这个也是要执行的
小明要上课了

上面这些是一些基础知识,为今天的主题app.route装饰器做铺垫
在蓝图里面使用装饰器都是下面这样的

@ac.route('/test',methods=['GET'])
def test():print(g)g.name=200print(g.name)return "hello world%s"%g.name

app.route源码如下

    def route(self, rule, **options):"""Like :meth:`Flask.route` but for a blueprint.  The endpoint for the:func:`url_for` function is prefixed with the name of the blueprint."""def decorator(f):endpoint = options.pop("endpoint", f.__name__)self.add_url_rule(rule, endpoint, f, **options)return freturn decorator

根据上面装饰器基本知识可以知道在程序编译过程中已经调用了add_url_rule这个函数,所以和django的urlpatterns一样,在程序启动的时候已经对所有的url请求地址初始化了,add_url_rule这个就不深入研究了,是一个很复杂过程,喜欢了解的去读源码了解,然后给我科普

为了验证上面的url和函数一一对应在监听启动的时候已经生成,在程序的主入口处直接打印出来
在manager.py程序调用入口处直接打印出来

app=create_app()
db.init_app(app)
print("app的所有url注册的连接",app.url_map)
migrate = Migrate(app,db)
manager=Manager(app)
manager.add_command('db',MigrateCommand)

打印了url

上面的url已经打印

获取flask的app.route装饰器所有url相关推荐

  1. Flask入门---@app.route()使用

    文章目录 一.@app.route()是什么? 二.基础理解 三.URL写法细则 四.带参数的@app.route() 五.通过?进行参数拼接 传递 六.选择路由跳转 一.@app.route()是什 ...

  2. Django 基础(6)-路由Routers-SimpleRouter-DefaultRouter、 action装饰器、URL路径参数

    文章目录 一.路由Routers 工作常见问题总结 提交表单报错:RuntimeError: You called this URL via POST, but the URL doesn't end ...

  3. Flask 框架app = Flask(__name__) 解析

    1 #!/usr/local/bin/python 2 # coding=utf-8 3 4 from flask import Flask 5 app = Flask(__name__) 6 7 @ ...

  4. Python 的装饰器执行顺序问题(二)

    2019独角兽企业重金招聘Python工程师标准>>> 一.问题分析 具体问题可见:Python 的装饰器执行顺序问题 原代码如下: def testwra(func):print ...

  5. python flask route中装饰器的使用

    问题:route中的装饰器为什么感觉和平时使用的不太一样,装饰器带参数和不太参数有什么区别?被修饰的函数带参数和不带参数有什么区别? 测试1:装饰器不带参数,被修饰的函数也不带参数. def log( ...

  6. Python flask 特殊装饰器 @app.before_request 和 @app.after_request 以及@app.errorhandler介绍

    特殊装饰器 @app.before_request 和 @app.after_request以及@app.errorhandler() 一.背景: Flask我们已经学习很多基础知识了,现在有一个问题 ...

  7. Flask系列06--(中间件)Flask的特殊装饰器 before_request,after_request, errorhandler

    一.使用 Flask中的特殊装饰器(中间件)方法常用的有三个 @app.before_request # 在请求进入视图函数之前 @app.after_request # 在请求结束视图函数之后 响应 ...

  8. flask装饰器顺序

    官方文档 To use the decorator, apply it as innermost decorator to a view function. When applying further ...

  9. python函数库app_Python的Flask框架中@app.route的用法教程

    在我上一篇文章,我搭了一个框架,模拟了Flask网站上"@app.route('/')"第一条例子的行为. 如果你错过了那篇"这不是魔法",请点击这里. 在这篇 ...

最新文章

  1. HDU-1698-Just a Hook
  2. 2020人工智能课程超级大列表:深度学习-强化学习-图神经网络-自然语言处理等...
  3. Linux命令学习之nslookup
  4. 新人新气象,给自己加油!
  5. 语音识别真的比肩人类了?听听阿里iDST初敏怎么说
  6. VSCode工程文件右侧A M U 字母的含义
  7. 【python】self cls
  8. 【App性能】:TraceView分析法
  9. 阿里云上的docker安装
  10. 单位内部一个计算机系统属于,2012年计算机一级MsOffice第五十九套练习题及答案解析...
  11. python 文本相似度_python实现余弦相似度文本比较
  12. mysql的service name_安装MYSQL出错:a windows service with the name MYSQL already...service解决...
  13. smartupload java_java组件smartupload实现上传文件功能
  14. 关于笔记本安装Deepin 或者ubuntu操作系统,无法进入界面。
  15. 第一百二十一天 : varnish
  16. 微信iOS 8.0.8正式版重磅更新啦,这些新功能超好用!!
  17. 计算机一打开就卡在更新失败,Win10更新系统卡住不动怎么办 Win10系统更新卡住不动解决方法...
  18. Vue项目和Tauri接入Google Analytics谷歌统计流程
  19. Cocos Creator入门实战:桌球小游戏
  20. java8,java9和java11的特性和区别!

热门文章

  1. 步进电机--S 曲线的C算法
  2. 读《禅与摩托车维修艺术》
  3. gmsv源代码c语言,石器时代ABLua的原理、简介、过程、运用、收发
  4. 英文简历中地址应该怎么翻译?
  5. 硬纪元干货|视+AR联合创始人涂意:AR将是下一代计算平台
  6. Python学习周报
  7. 406错误 java
  8. pytorch训练网络 程序未报错 但是训练不动
  9. 聚焦三航道,腾讯云重推五大数据库新品,现场很赞!
  10. 1、ABP 文档介绍