Flask路由提取参数与自定义路由转换器
2020-09-09 本文已影响0人
测试探索
转换器为int类型
from flask import Flask,current_app,redirect,url_for
# 创建flask应用对象
# __name__表示当前的模块名字
# 模块名,flask以整个模块所在的目录为总目录,默认整个目录中的static为静态目录
# templates为模板目录
app = Flask(__name__)
# 转换器
@app.route("/goods/<int:goods_id>")
def goods_detail(goods_id):
"""
定义的视图函数
:return:
"""
return "goods detail page %s" % goods_id
if __name__ == '__main__':
# 通过url_map可以查看整个flask中路由信息
print(app.url_map)
app.run(debug=True)
image.png
没有定义转换器类型,默认是普通字符串规则
from flask import Flask,current_app,redirect,url_for
# 创建flask应用对象
# __name__表示当前的模块名字
# 模块名,flask以整个模块所在的目录为总目录,默认整个目录中的static为静态目录
# templates为模板目录
app = Flask(__name__)
# 转换器
# @app.route("/goods/<int:goods_id>") 转换器类型为int
@app.route("/goods/<goods_id>") #不加转换器类型,默认是普通字符串规则(除了/的字符)
def goods_detail(goods_id):
"""
定义的视图函数
:return:
"""
return "goods detail page %s" % goods_id
if __name__ == '__main__':
# 通过url_map可以查看整个flask中路由信息
print(app.url_map)
app.run(debug=True)
image.png
自定义转换器
from flask import Flask,current_app,redirect,url_for
#werkzeug提供关于路径解析设置的工具,BaseConverter转换器父类
from werkzeug.routing import BaseConverter
# 创建flask应用对象
# __name__表示当前的模块名字
# 模块名,flask以整个模块所在的目录为总目录,默认整个目录中的static为静态目录
# templates为模板目录
app = Flask(__name__)
# 转换器
# @app.route("/goods/<int:goods_id>") 转换器类型为int
@app.route("/goods/<goods_id>") #不加转换器类型,默认是普通字符串规则(除了/的字符)
def goods_detail(goods_id):
"""
定义的视图函数
:return:
"""
return "goods detail page %s" % goods_id
#1.定义自己的转换器
class RegexConverter(BaseConverter):
"""
"""
def __init__(self,url_map,regex):
#调用父类的初始化方法
super().__init__(url_map)
# 将正则表达式的参数保存到对象属性中,flask会去使用这个属性来进行路由的正则匹配
self.regex = regex
#2. 将自定义的转换器添加到flask的应用中,只把类存进去,没有创建对象
app.url_map.converters["re"] = RegexConverter
@app.route("/send/<re(r'1[34578]\d{9}'):mobile>")
def send_sms(mobile):
return "send sms to %s " % mobile
if __name__ == '__main__':
# 通过url_map可以查看整个flask中路由信息
print(app.url_map)
app.run(debug=True)
image.png
image.png