zoukankan      html  css  js  c++  java
  • 06 flask源码剖析之路由加载

    06 Flask源码之:路由加载

    1.示例代码

    from flask import Flask
    
    app = Flask(__name__,static_url_path='/xx')
    
    @app.route('/index')
    def index():
        return 'hello world'
    

    2.路由加载源码分析

    1. 先执行route函数

      def route(self, rule, **options):
          def decorator(f):
              endpoint = options.pop("endpoint", None)
              self.add_url_rule(rule, endpoint, f, **options)
              return f
          return decorator
      
    2. 执行add_url_rule函数

      def add_url_rule(
          self,
          rule,
          endpoint=None,
          view_func=None,
          provide_automatic_options=None,
          **options
      ):
          if endpoint is None:
              endpoint = _endpoint_from_view_func(view_func)
              options["endpoint"] = endpoint
              methods = options.pop("methods", None)
      
              if methods is None:
                  methods = getattr(view_func, "methods", None) or ("GET",)
      
                  rule = self.url_rule_class(rule, methods=methods, **options)
      
                  self.url_map.add(rule)
                  if view_func is not None:
                      self.view_functions[endpoint] = view_func
      
      1. url = /index methods = [GET,POST] endpoint = "index"封装到Rule对象
      2. 将Rule对象添加到 app.url_map中。
      3. 把endpoint和函数的对应关系放到 app.view_functions中。
      4. 当一个请求过来时,先拿路由在app.url_map找对应的别名,再在app.view_functions中找到别名对应的视图函数
  • 相关阅读:
    什么是缓存?
    什么是反射?
    Nginx配置文件详解
    数据库插入,修改出现中文乱码解决办法
    hadoop的HA机制+zookeeper
    cascading--wordcount
    心情3
    完成用户登录注册功能
    感慨1
    Swing程序设计-初级
  • 原文地址:https://www.cnblogs.com/liubing8/p/11930236.html
Copyright © 2011-2022 走看看