首页 > 其他 > 详细

Flask之路由系统

时间:2019-11-26 19:58:41      阅读:78      评论:0      收藏:0      [点我收藏+]

路由系统

  • 路由的两种写法

    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也支持自定义的正则表达式的路由

Flask之路由系统

原文:https://www.cnblogs.com/zhufanyu/p/11937980.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!