Flask 创建app 时候传入的 static_folder 和 static_url_path参数理解

Flask 在创建app的时候

是用

app = Flask(__name__)
 
 

来创建的,不传入 static_folder参数的话 ,默认的静态文件的位置是在 static目录下

我们可以进入 Flask的源码里面查看 ctrl+鼠标左键进入

这是Flask的 __init__源码(后面还有一些,我就选了需要的代码)


 
 
  1. def __init__(
  2. self,
  3. import_name,
  4. static_url_path=None,
  5. static_folder='static',
  6. static_host=None,
  7. host_matching=False,
  8. subdomain_matching=False,
  9. template_folder='templates',
  10. instance_path=None,
  11. instance_relative_config=False,
  12. root_path=None
  13. ):
  14. _PackageBoundObject.__init__(
  15. self,
  16. import_name,
  17. template_folder=template_folder,
  18. root_path=root_path
  19. )
  20. if static_url_path is not None:
  21. self.static_url_path = static_url_path
  22. if static_folder is not None:
  23. self.static_folder = static_folder

我们可以看到 static_folder 是默认为 static的

我们之所以能够访问到 static下面的静态文件,是因为注册了路由,就和flask的 app.route一样

我们现在查看下 注册路由的方法


 
 
  1. if self.has_static_folder:
  2. assert bool(static_host) == host_matching, 'Invalid static_host/host_matching combination'
  3. self.add_url_rule(
  4. self.static_url_path + '/<path:filename>',
  5. endpoint= 'static',
  6. host=static_host,
  7. view_func= self.send_static_file
  8. )

实际上 app.route底层也是这个方法

然后进去 staic_url_path这个方法

可以看到


 
 
  1. def _get_static_url_path(self):
  2. if self._static_url_path is not None:
  3. return self._static_url_path
  4. if self.static_folder is not None:
  5. 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应用中,当你需要提供静态文件(如CSS、JavaScript、图片等)给前端网页访问时,通常会使用`static_folder`来存储这些文件,并通过`static_url_path`来生成指向这些文件的URL。`static_url_path`是一个应用程序配置变量,用于告诉Flask在哪里能找到静态资源。 以下是如何在Flask应用中注册`static_url_path`的一个简单步骤: 1. 导入必要的模块: ```python from flask import Flask, render_template, send_from_directory ``` 2. 初始化Flask应用并设置静态文件目录: ```python app = Flask(__name__) app.config['STATIC_FOLDER'] = 'static' # 假设你的静态文件都在'app/static/'目录下 ``` 3. 定义`static_url_path`,通常我们会将其设置为"/static/"或"/": ```python app.config['STATIC_URL_PATH'] = '/static/' ``` 4. 使用`send_from_directory`函数处理静态文件请求,例如当用户试图访问像"/css/style.css"这样的路径: ```python @app.route('/static/<path:path>') def send_css(path): return send_from_directory(app.static_folder, path) ``` 5. 渲染HTML模板时,可以像这样引用静态文件: ```html <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/style.css') }}"> ``` 在这里,`url_for()`函数会根据`STATIC_URL_PATH`自动加上正确的前缀,返回完整的URL地址。 注意,`send_from_directory`函数在生产环境中应有安全限制,避免直接暴露所有静态文件,例如只允许访问特定的目录结构。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值