跳转至

动态路由

  1. 如果该路由需要路径传参可以使用动态路由
  2. 一旦设置动态路由, 视图中必须设置同名的关键词参数来接受路由中的变量
  3. 动态路由中的<> 就是一个正则转换器, 默认是转为 str 类型
from flask import Flask

app = Flask(__name__)

# 设置动态路由
@app.route('/user/<userid>')
def users(userid): 
    return '您请求的用户是:{}, 请求的类型是:任意'.format(userid)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)

正则转换器

  1. 动态路由可以在传参时使用正则转换器对参数进行正则校验
  2. 所有的正则转换器,都继承自BaseConverter
  3. 正则转换器在接受参数的时候就开始校验数据类型是否符合规范,否则直接404
  4. Flask也提供了其他的转换器
  5. 'default': UnicodeConverter,
  6. 'string': UnicodeConverter,
  7. 'any': AnyConverter,
  8. 'path': PathConverter,
  9. 'int': IntegerConverter,
  10. 'float': FloatConverter,
  11. 'uuid': UUIDConverter,
  12. 源码中会把整个数据类型(str, int, float)赋值给类属性, 类属性self.num_convert有了数据类型的所有的属性之后 可以直接使用类属性进行强转, self.num_convert(value)

  13. demo

@app.route('/user/<int:userid>') # 定义一个路由, 客户端访问时, 请求路径中的关键字参数, 必须能转成int类型
def user(userid):
    return '您请求的用户是:{}, 请求的类型必须是int类型'.format(userid)

自定义正则转换器

  1. 自定义的正则转换器正则中不能使用^ 开头 因为flask会自动帮我们构建
  2. 自定义一个转换器必须继承BaseConverter的类
  3. 需要设置设置类属性regex来接收匹配规则
  4. 自定义的转换器需要注册到路由中app.url_map.converters['key'] = value,内部是个字典,直接kv设置就ok
#导入
from werkzeug.routing import BaseConverter

# 自定义一个转换器
class MobleConverter(BaseConverter):
    regex = '1[3-9]\d{9}' # 规则

# 注册转换器到本应用中
app.url_map.converters['mob'] = MobleConverter

# 使用我们自定义的转换器来生成路由
# 使用自定义的正则转换器 生成路由
@app.route('/mobles/<mob:mob_id>')
def moble_info(mob_id):
    return '您的手机号是{}'.format(mob_id)