7.1 静态文件访问原理
1.默认访问方法
Flask访问静态文件非常简单,只需要在项目根目录建立static文件夹。将静态资源文件放入static下即可。访问的时候访问http://ip:port/static/fileName
即可。
需要注意的是,这里的根目录并不是项目的根目录fisher,而是app目录。这是因为,我们在实例化Flask核心对象的时候,传入了__name__参数,这个 __name__指向的就是当前文件所在目录。

2.修改默认存储路径
修改默认存储路径,只需要在实例化Flask核心对象的时候,传入static_folder这个关键字参数即可,但是这个时候,访问的路径应该变成http://ip:port/static_folder的最后一级/fileName
,如果想自定义url访问路径,传入关键字参数static_url_path即可
app = Flask(__name__, static_folder="statics", static_url_path="/static")
3.核心原理
在Flask的app.py的Flask类的构造函数的地556行,是注册静态资源视图函数的源码,可以看到实际上就是通过我们之前所讲到的add_url_rule注册了一个视图函数。其中的访问url路径,就是获取了static_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
)
下面是static_url_path的定义,可以看到他是调用了_get_static_url_path方法。 这个方法首先获取static_url_path关键字参数,如果有,则直接将其作为url访问路径,否则获取static_folder关键字参数,如果有,则取他的基本路径拼拼接上"/"作为url访问路径
def _get_static_url_path(self):
if self._static_url_path is not None:
return self._static_url_path
if self.static_folder is not None:
return '/' + os.path.basename(self.static_folder)
Last updated
Was this helpful?