route路由
url+后缀的方式对应不同的view处理方法,route就是做请求分发。
1)route路由对应的函数称为:endpoint,不可相同,可以自己定义。
2)同名route,走代码中最上面的。
app.route
参数 | 作用 | |
---|---|---|
endpoint | 自定义endpoint,框架自己识别函数入口点 | @app.route("/", endpoint='demo') |
methods | 指定接口请求方式 | @app.route('/', methods=["GET", "POST"]) |
路由传参
@app.route("/test/<number>")
def aaa(number):
pass #
默认类型(默认路由转换器)
@app.route("/test/<type:number>")
def aaa(number):
pass #
#传参类型修改/test/<int/float/any/string/path/uuid:number> 不写默认string
自定义类型
from werkzeug.routing import BaseConverter
from flask import Flask
class RegexConverter(BaseConverter):
def __init__(self, url_map, regex):
#调用父类方法
super(RegexConverter, self).__init__(url_map)
self.regex = regex
# self.regex = '123'
def to_python(self, value):
print('to_python 调用')
return value
app = Flask(__name__) #启动主模块
#自定义转换器添加至flask中
app.url_map.converters['re'] = RegexConverter
@app.route('/index/<re("123"):value>')
# @app.route('/index/<re:value>')
def index(value):
print('----------vaule', value)
return "hello"
if __name__ == '__main__':
app.run(port=8088)
注:路径后面最好不加/,用来保持url唯一
查看设置的路由
for rule in app.url_map.iter_rules():
print(rule)
print({rule.endpoint:rule.rule})
#{'helloWorld': '/'}
#{'static': '/static/<path:filename>'}
路由模块化-蓝图
蓝图对象创建
from flask import Blueprint, request
# 创建了一个蓝图对象
queryInfo = Blueprint('queryInfo', __name__)
@queryInfo.route("/queryHistoryData", methods=["POST"])
def queryHistoryData():
return "hello"
蓝图注册
·在app.py中进行注册
from controller.test_controller import testModule
from controller.model_predict import modelPredict
from controller.queryInfo import queryInfo
app = Flask(__name__)
app.register_blueprint(testModule, url_prefix='/testModule')
app.register_blueprint(modelPredict, url_prefix='/model')
app.register_blueprint(queryInfo, url_prefix='/info')
if __name__ == "__main__":
app.run()
访问
样例:http://127.0.0.1:5000/info/queryHistoryData