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部分