典型写法
@app.route('/detail/<int:id>', methods=['GET'], endpoint='detail')
默认转换器
DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}
路由系统的本质
decorator = @app.route('/', methods=["GET", "POST"], endpoint='s1')
def route(self, rule, **options):
def decorator(f):
endpoint = options.pop("endpoint", None)
self.add_url_rule(rule, endpoint, f, **options)
return f
return decorator
@decorator
decorator(index)
# 同理
def login():
return "登录"
app.add_url_rule('/index', endpoint='s1', login, methods=["GET", "POST"])
# 与django路由类似
# Django与flask路由基于装饰器,本质是基于add_url_rule
# endpoint随便取,但是不能重复,一旦重复就报错,如果不传加装饰器会有问题
# add_url_rule 源码中endpoint如果是为空,endpoint = _endpoint_from_view_func(view_func),最终取return view_func.__name__
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/', endpoint='index', methods=['GET'])
def index():
return jsonify(
{
"name": "xxx",
'age': 21
}
)
# app.add_url_rule('/', view_func=index, endpoint='index')
if __name__ == '__main__':
app.run()