zoukankan      html  css  js  c++  java
  • 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也支持自定义的正则表达式的路由
    
  • 相关阅读:
    带你了解 MySQL Binlog 不为人知的秘密
    算法的空间复杂度
    算法的时间复杂度
    xargs--冬天里的一丝暖意
    "三剑客"之awk心中无剑
    hadoop之yarn(优化篇)
    对hadoop RPC的理解
    mysql优化篇(基于索引)
    [python学习手册-笔记]003.数值类型
    [python学习手册-笔记]001.python前言
  • 原文地址:https://www.cnblogs.com/zhufanyu/p/11937980.html
Copyright © 2011-2022 走看看