本文主要是介绍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_pathif 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这个方法
可以看到
def _get_static_url_path(self):if self._static_url_path is not None:return self._static_url_pathif self.static_folder is not None:return '/' + os.path.basename(self.static_folder)
一看就明白,假如我们创建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
这篇关于Flask 创建app 时候传入的 static_folder 和 static_url_path参数理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!