flask路由

引子:

  与django 的路由不同的是,flask是基于装饰器实现的,最终还是通过add_url_rule 来实现的

代码:

  

# -*- coding: utf-8 -*-
"""
@author:yuan_x
@software:PyCharm
@file:flask_route_stu.py
@time:2021/1/31 8:26 下午


"""



"""
常用的路由系统
    
@app.route("/user/<username>")
@app.route("/post/<int:id>")
@app.route("/user/<float:id>")
@app.route("/user/<path:path>")
@app.route("/login",methods=["GET","POST"])


常用的路由系统有以上5种,所有的路由系统都是给予一下对应关系来处理

DEFAULT_CONVERTERS={
    "default":UnicodeConverter,
    "string":UnicodeConverter,
    "any":AnyConverter,
    "path":PathConverter,
    "int":IntergerConverter,
    "float":FloatConverter,
    "uuid":UUIDConverter
            }

"""

from flask import Flask

app=Flask(__name__)

"""
route 源码解析
1 decorator=app.route('/',methods=["GET","POST"],endpoint="test1")
    本质上就是装饰器
    def route(self, rule, **options):
        # self==== app 对象
        # rule=/
        # options={methods=["GET","POST"],endpoint="test1"}
        def decorator(f):
            endpoint = options.pop("endpoint", None)
            self.add_url_rule(rule, endpoint, f, **options)  其实就是把路由注册进去
            return f
        return decorator

2 @decorator=====》decorator(index)
"""
@app.route('/',methods=["GET","POST"],endpoint="test1")
def index():
    return "hello world"

def login():
    return "login success"

# 同上方注释中的 self.add_url_rule(rule, endpoint, f, **options)
# 如果endpoint 为None 那么flask会将函数名字作为endpoint methods不写同样默认是GET
# 可以加很多 类似 django 的路由了
app.add_url_rule("/login","test2",login,methods=["GET","POST"])

if __name__ == '__main__':
    app.run()

  

 

add_url_rule源码部分

  1 endpoint 

 

 

 

 

    2 method部分

 

 

 

 app.route部分

 

 

 

  

 

posted @ 2021-01-31 22:07  Yuan_x  阅读(96)  评论(0编辑  收藏  举报