zoukankan      html  css  js  c++  java
  • Flask 参数简介

    我们都知道学习了Flask的时候它里面的参数是有很多种的参数  都是需要相互进行调用传递的  今天就简要分析一些常见的参数

    首先导入Flask之后看 源码

    from flask import Flask

     首先看到我们的Flask类继承了一个 _PackageBoundObject类 这个类是有大用处的,下面我们在进行分解

     

    首先找到Flask中的__init__中的 参数

    def __init__(
            self,
            import_name,  #默认参数必须传递
            static_url_path=None,  # 静态文件的地址前缀,写的是什么在访问静态文件的时候就会加这个 
            static_folder='static', #静态文件所在文件夹的名字  默认是static 可以进行修改
         static_host
    =None, host_matching=False, subdomain_matching=False, template_folder='templates',    # 模板所在的文件夹名字,虽然是默认的但是可以修改
        instance_path
    =None, instance_relative_config=False, root_path=None              # 当前执行文件所在目录地址 ):

    当我们执行return render_template 会将root_path和template_folder进行拼接

    instance_pathinstance_relative_config是配合来用的:

    这两个参数是用来找配置文件的,当用app.config.from_pyfile('settings.py')这种方式导入配置文件的时候会用到

    instance_relative_config:默认为False当设置为True时from_pyfile会从instance_path指定的地址下查找文件。

    instance_path指定 from_pyfile查询文件的路径,不设置时,默认寻找和app.run()的执行文件同级目录下的instance文件夹,如果配置了instance_path(注意需要是绝对路径),就会从指定的地址下里面的文件

    instance_path 这是放置运行时更改的文件和配置文件的最佳位置,也就是我们的默认的配置文件更改之后就会 需要这个配置选项

    app = Flask(__name__, instance_path='/path/to/instance/folder')

    请注意给出的 一定 是绝对路径。

    import_name这个参数只尤其重要的  因为很多的参数的获取都是由import_name来获取的 ,并且这个import_name就是代表我们的实例化传参的__name__

    如果没有传递__name__或者import_name就会报错:

    class Application(Flask):
    
        # 因为它的默认的是在templates但是我没修改了文件存放路径 也需要把寻找文件路径给修改,其中的static文件在正式开发中式不需要的  因为有其他方法可以直接找到
    
        def __init__(self,import_name,template_folder = None,root_path =None): #因为模板会自动默认的从templates下找 因为我没改变来的模板路径 所以我们要自定义路径
            super(Application,self).__init__(import_name,template_folder=template_folder,root_path = root_path,static_folder=None)  # __init__可以查看你所需要的源码
            self.config.from_pyfile('config/base_setting.py')#导入配置文件
    
    app = Application(__name__,template_folder = os.getcwd()+"/web/templates/",root_path=os.getcwd())

    最开始Flask集成的 _PackageBoundObject类 是对我们的

            _PackageBoundObject.__init__(  # 调用自己的init然后接受参数
                self,
                import_name,
                template_folder=template_folder,
                root_path=root_path
            )

    从上面可以看出Flask 继承自_PackageBoundObject 类,在Flask 的init 魔法方法中调用了父类_PackageBoundObject init 魔法方法.

    然后通过传递来的import_name来获取root_path

     def __init__(self, import_name, template_folder=None, root_path=None):
            self.import_name = import_name
            self.template_folder = template_folder
    
            if root_path is None:
                root_path = get_root_path(self.import_name)  # 获取root_path
    
            self.root_path = root_path
            self._static_folder = None
            self._static_url_path = None

    flask 通过调用父类_PackageBoundObject 初始化方法设置import_name / template_folder / root_path 实例属性的值. root_path 属性的值是使用import_name 属性作为参数,调用get_root_path方法得到的.

    通过这里可以更直观的看出 root_path 得到的是主模块所在的目录的绝对路径

    也就是我们通过import_name然后得到的参数__name__ 来通过_PackageBoundObject 获取到当前文件的路径,这就是我们的实例化的时候为什么一定要__name__这是为了告诉其他的掉用文件我们的路径

  • 相关阅读:
    input 特殊字符限制
    angular $http服务
    angular $resouse服务
    ng-model-options 时延
    Pytorch之数据处理
    python 小顶堆
    刷题套路总结
    数组分成和尽可能相等的子数组
    python3.7 sorted 自定义排序
    Leetcode 二维数组周游 54
  • 原文地址:https://www.cnblogs.com/zhaoyunlong/p/10112978.html
Copyright © 2011-2022 走看看