1. 程式人生 > >Flask 建立app 時候傳入多個引數

Flask 建立app 時候傳入多個引數

Flask 建立app 時候傳入的 static_folder 和 static_url_path引數理解

Flask 在建立app的時候

是用

app = Flask(__name__)

來建立的,不傳入 static_folder引數的話 ,預設的靜態檔案的位置是在 static目錄下

我們可以進入 Flask的原始碼裡面檢視 ctrl+滑鼠左鍵進入

這是Flask的 __init__原始碼(後面還有一些,我就選了需要的程式碼)

    def __init__(
        self,
        import_name,
        static_url_path=None,
        static_folder='static',
        static_host=None,
        host_matching=False,
        subdomain_matching=False,
        template_folder='templates',
        instance_path=None,
        instance_relative_config=False,
        root_path=None
    ):
        _PackageBoundObject.__init__(
            self,
            import_name,
            template_folder=template_folder,
            root_path=root_path
        )
 
        if static_url_path is not None:
            self.static_url_path = static_url_path
 
        if static_folder is not None:
            self.static_folder = static_folder

我們可以看到 static_folder 是預設為 static的

我們之所以能夠訪問到 static下面的靜態檔案,是因為註冊了路由,就和flask的 app.route一樣

我們現在檢視下 註冊路由的方法

        if self.has_static_folder:
            assert bool(static_host) == host_matching, 'Invalid static_host/host_matching combination'
            self.add_url_rule(
                self.static_url_path + '/<path:filename>',
                endpoint='static',
                host=static_host,
                view_func=self.send_static_file
            )

實際上 app.route底層也是這個方法

然後進去 staic_url_path這個方法

可以看到

        if self.has_static_folder:
            assert bool(static_host) == host_matching, 'Invalid static_host/host_matching combination'
            self.add_url_rule(
                self.static_url_path + '/<path:filename>',
                endpoint='static',
                host=static_host,
                view_func=self.send_static_file
            )

一看就明白,假如我們建立app的時候 傳入了 static_folder引數,那麼就返回url

比如我們傳人的是

app = Flask(__name__, static_folder='views/statics')

那麼我們的靜態檔案訪問就變成了 statics了

同理 我們也只能訪問static下面的檔案。

我們還可以這樣定義

app = Flask(__name__, static_folder='spider', static_url_path='/spider/1')

這句話的意思就是 我們可以spider檔案下的靜態檔案,但是我們訪問的方式為

127.0.0.1:5000/spider/1/xxx.xxx