Flask之路由系统

路由系统

  • 路由的两种写法

    1.第一种方法:
        def index():
            return render_template('index.html')
        app.add_url_rule('/index', 'index', index)
    
    
    2. 公司里一般用这种方式
        @app.route('/login')
        def login():
            return render_template('login.html')
    

    解析

    1.  第一种方法中执行"add_url_rule"方法,这个方法里边需要的参数解析:
    def add_url_rule(
            self,
            rule,
            endpoint=None,
            view_func=None,
            provide_automatic_options=None,
            **options
        ):
        self:是当前这个app对象;
        rule: 当前这个路由:'/login'
        endpoint: 当前这个视图的别名;
        view_func: 指定执行的视图函数
            
    2.第二种:@app.route('/login'),第二种的这个方法其实内部都是调用了"add_url_rule"这个方法;内部实现都是一样的。
    
  • 路由加载的源码流程

    - 将url和函数打包成为 rule 对象
     	# rule = self.url_rule_class(rule, methods=methods, **options)
    - 将rule对象添加到map对象中。
    	# self.url_map.add(rule)
    - app.url_map = map对象
    	# self.url_map = self.url_map_class()
    
  • 动态路由

    @app.route('/login')
    def login():
        return render_template('login.html')
        
    @app.route('/login/<name>')
    def login(name):
    	print(type(name))
        return render_template('login.html')
        
    @app.route('/login/<int:name>')
    def login(name):
    	print(type(name))
        return render_template('login.html')
    
  • 支持正则表达式的路由

    from flask import Flask,render_template
    
    app = Flask(__name__)
    
    from werkzeug.routing import BaseConverter
    class RegConverter(BaseConverter):
        def __init__(self, map, regex):
            super().__init__(map)
            self.regex = regex
    app.url_map.converters['regex'] = RegConverter
    
    @app.route('/index/<regex("d+"):x1>')
    def index(x1):
        return render_template('index.html')
    
    if __name__ == '__main__':
        app.run()
    
  DEFAULT_CONVERTERS = {
      "default": UnicodeConverter,
      "string": UnicodeConverter,
      "any": AnyConverter,
      "path": PathConverter,
      "int": IntegerConverter,
      "float": FloatConverter,
      "uuid": UUIDConverter,
  }
  
  1. flask中提供了这些动态路由的方法,针对不同的值有着不同的操作方法,装换成不同的类型值;
  2. 并且flask也支持自定义的正则表达式的路由
原文地址:https://www.cnblogs.com/zhufanyu/p/11937980.html