• 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也支持自定义的正则表达式的路由
    
  • 相关阅读:
    ASE19团队项目 beta阶段 model组 scrum report list
    ASE19团队项目 beta阶段 model组 scrum7 记录
    ASE19团队项目 beta阶段 model组 scrum6 记录
    ASE19团队项目 beta阶段 model组 scrum5 记录
    ASE19团队项目 beta阶段 model组 scrum4 记录
    ASE19团队项目 beta阶段 model组 scrum3 记录
    ASE19团队项目 beta阶段 model组 scrum2 记录
    ASE19团队项目 beta阶段 model组 scrum1 记录
    【ASE模型组】Hint::neural 模型与case study
    【ASE高级软件工程】第二次结对作业
  • 原文地址:https://www.cnblogs.com/zhufanyu/p/11937980.html
Copyright © 2020-2023  润新知