Flask 建立app 時候傳入多個引數
阿新 • • 發佈:2019-01-08
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