Flask框架中路由的定义和使用方法

Flask框架中路由的定义和使用方法

1.定义路由
定义路由的三个细节

  • 路由对应的URL必须以 / 开头
  • app.url_map 获取所有路由规则,路由规则中主要包含 URL资源段、支持的请求方式、视图函数标记 三部分内容
  • app.route() 的 methods参数 指定路由支持的请求方式
from flask import Flask

app = Flask(__name__)

# 1.路由对应的URL必须以/开头
# 2.通过app的url_map属性获取所有的路由规则 (URL资源段 支持的请求方式 视图函数标记)
# 3.可以通过route方法的methods参数指定路由支持的请求方式
@app.route('/hello', methods=['post', 'get'])
def index():

    return "index"


if __name__ == '__main__':
    print(app.url_map)

    # 获取路由信息
    # for rule in app.url_map.iter_rules():
    #     print(rule.rule, rule.methods, rule.endpoint)

    app.run(debug=True)

2.路由变量

  • 路由变量的作用是 传递URL路径参数, 实现动态URL
  • 格式: /xx/<路由变量>
from flask import Flask

app = Flask(__name__)

# 路由变量: 传递URL路径参数
# 格式: /user/<路由变量名>
@app.route('/user/<userid>')
def index(userid):  # 必须定义同名形参接收路由变量的值
    print(userid)
    return "index"


if __name__ == '__main__':
    app.run(debug=True)

3.路由转换器

  • 路由转换器的作用是 对URL传递的参数进行格式校验, 类似Django设置URL时的正则表达式参数
  • 格式: /xx/<转换器名:路由变量>
  • 所有的转换器类都继承自 BaseConverter 类
from flask import Flask

app = Flask(__name__)

# 路由转换器: 对路由变量进行格式校验  条件不满足返回404
# 格式: /user/<路由转换器名:路由变量>
@app.route('/user/<int:userid>')  # int: 内置转换器, 要求1-n个整数
def index(userid):
    print(userid)
    return "index"


if __name__ == '__main__':
    app.run(debug=True)

4.自定义转换器

  • 除了使用内置的变量转换器, 开发者还可以自定义转换器, 更加灵活的校验路由变量
  • 使用自定义转换器的步骤
    1.定义转换器类, 继承BaseConverter
    2.设置regex属性 (正则匹配规则)
    3.应用添加自定义转换器
# 自定义转换器:
# 1.定义转换器类, 继承BaseConverter
# 2.设置regex属性 (正则匹配规则)
# 3.添加自定义转换器

from flask import Flask
from werkzeug.routing import BaseConverter

app = Flask(__name__)

# 1.定义转换器类
class MobileConverter(BaseConverter):
    # 2.设置regex属性(匹配规则)
    regex = '1[3-9]\d{9}$'  # 不要设置开头的^

# 3.添加自定义转换器
app.url_map.converters['mob'] = MobileConverter

@app.route('/user/<mob:mobile>')
def index(mobile):
    print(mobile)
    return "index"

if __name__ == '__main__':
    # 获取所有的转换器 {转换器名: 转换器类}
    # print(app.url_map.converters)
    app.run(debug=True)

版权声明:本文为li944254211原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。