zoukankan      html  css  js  c++  java
  • Flask源码之:路由加载

    路由加载整体思路:

    1. 将 url = /index  和  methods = [GET,POST]  和 endpoint = "index"封装到Rule对象

    2. 将Rule对象添加到 app.url_map中。

     url_rule_class = Rule

     self.url_map = self.url_map_class()

    3. 把endpoint和函数的对应关系放到 app.view_functions中。

    self.view_functions = {}

    在add_url_rule中有:

    self.view_functions[endpoint] = view_func

    看源码:

    手写项目启动:
    from flask import Flask
    
    app = Flask(__name__,static_url_path='/xx')
    
    @app.route('/index')
    def index():
            return 'hello world'
    
    if __name__ == '__main__':
            app.run()

    点击route进入源码

    route函数整体是个闭包

    点击add_url_rule,里面传了很多参数,self是app,rule是'/index'这个路径字符串,endpoint默认就是函数的别名'index',f就是函数名index

     options["endpoint"] = endpoint将endpoint作为值放到options的字典里面去了,

    再点_endpoint_from_view_func

     返回就是个函数名,所以endpoint不写时默认就是你传进来的函数名

    再回到add_url_rule

     再往下找,rule = self.url_rule_class(rule, methods=methods, **options)就把rule(路径),methods支持请求方式,这里的option就是刚才传进去的endpoint(函数别名)都给传进去了

    再点url_rule_class进去

     所以,前面的rule就是Rule的一个对象,并把三个参数给封装了进去

    再点Rule进去

     刚才传的路径给了string,methods放到了methods(GET,POST之类的),endpoint放的是函数别名(字符串)

    再回到add_url_rule

     往下走,self.url_map.add(rule),你点url_map进去之后会发现他是个Map的对象,就把rule添加到了Map对象中了

    再往下看,view_func是真正的函数名,函数名被放到了一个字典中.

     这样,flask路由的加载就走完了

     所有的内容全部都加到了app中去了.

  • 相关阅读:
    Linux下的SVN服务器搭建
    [转][osg]关于PagedLOD 加载卸载机制
    [原][osg]osg文件与osgb文件的区别
    [转][cesium]1.添加本地服务器
    [原][osg][osgearth]倾斜摄影2.文件格式分析:OSGB
    [原][数学][C++][osg]空间向量OA到转到空间向量OB、以及四元素Q1转到Q2的函数
    [原][osgEarth]添加自由飞行漫游器
    [c][c++]按位操作
    [转]QT中QString与string的转化,解决中文乱码问题
    [原][osg][osgearth]倾斜摄影1.介绍
  • 原文地址:https://www.cnblogs.com/shengjunqiye/p/11924832.html
Copyright © 2011-2022 走看看