flask-assets - 如何防止特定应用静态js文件被其他应用使用
flask-assets - How to keep an specific app's static js files from being used by another app
我以前做过,但我完全忘记了我是怎么做到的。
我正在开发一个烧瓶服务器,其中包含多个应用程序,静态文件捆绑在一起,但我希望每个应用程序的静态文件夹中的 js/css 文件仅供该应用程序的 init.py 文件中定义的路由使用。
假设我有一个 appA 和 appB:
app
- static // this contains my common js/css files
- apps
- appA
- __init__.py
- static // appA's js/css files
- appB
- __init__.py
- static // appB's js/css files
然后我去 "localhost:8000:/appA"(假设它是我定义的路线)。在它的 js 文件中我有
$(document).ready(function(params) {
console.log('appA ready');
});
如果我转到 "localhost:8000/appB",它的 js 文件中有
$(document).ready(function(params) {
console.log('appB ready');
});
无论我选择哪条路线 运行 我都会在控制台中看到 "appA ready" 和 "appB ready" 打印出来。
现在我知道这是有道理的。毕竟我已经将它们捆绑在一起并缩小了。但就我的生活而言,我知道我过去使用过捆绑包,但能够挑出哪个应用程序使用了哪个静态文件。
重点是对常用内容使用基本静态目录,对 app-specific 内容使用应用程序的静态目录。
我的资产是这样配置的
from app.apps.appA import appA
from app.apps.appA import appA_js, appA_css
from app.apps.appB import appB
from app.apps.appB import appB_js, appB_css
flask_app.register_blueprint(appA)
flask_app.register_blueprint(appB)
globals_js = ('js/utils/jquery-3.4.1.min.js',
'js/utils/socket.io.js',
'js/utils/*.js')
globals_css = ('css/utils/common.css',
'css/utils/*.css')
assets = Environment(flask_app)
bundle_globals_js = Bundle(*globals_js + appA_js + appB_js, filters='jsmin', output='dist/local_js.js')
bundle_globals_css = Bundle(*globals_css + appA_css + appB_css, filters='cssmin', output='dist/local_css.css')
assets.register('base_js', bundle_globals_js)
assets.register('base_css', bundle_globals_css)
我觉得我的资产包配置有问题。要么就是这样,要么就是我在 html.
中导入文件的方式
<head>
{% assets "base_js" %}
<script type="text/javascript" src="{{ ASSET_URL }}"></script>
{% endassets %}
{% assets "base_css" %}
<link rel="stylesheet" href="{{ ASSET_URL }}"/>
{% endassets %}
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>{{title}}</title>
</head>
这是每个特定 html 文件 appA 和 appB 所使用的 header 代码。
这里可能只是对如何使用 bundle 存在根本性的误解。
我只想指定一个公共静态目录,但能够让我的应用程序使用自己的 js/css 文件与这些基本文件结合使用。
有人能给我指出正确的方向吗?
谢谢!
我想出来了,虽然不是我记得的那样。
而不是将我所有的静态文件捆绑在一起作为 "base_js" 或 "base_css" 包,
我创建了具有唯一名称的单独包。
bundles = {
'globals_js': Bundle('js/utils/jquery-3.4.1.min.js',
'js/utils/socket.io.js',
'js/utils/*.js',
filters='jsmin',
output='dist/local_global_js.js'),
'globals_css': Bundle('css/utils/common.css',
'css/utils/*.css',
filters='cssmin',
output='dist/local_global_css.css'),
'appA_js': Bundle(*appA_js,
filters='jsmin',
output='dist/local_appA_js.js'),
'appA_css': Bundle(*appA_css,
filters='cssmin',
output='dist/local_appA_css.css'),
'appB_js': Bundle(*appB_js,
filters='jsmin',
output='dist/local_appB_js.js'),
'appB_css': Bundle(*appB_css,
filters='cssmin',
output='dist/local_appB_css.css')
}
现在我指定一个基础 html 文件,在头部添加全局资源
<head>
{% assets "globals_js" %}
<script type="text/javascript" src="{{ ASSET_URL }}"></script>
{% endassets %}
{% assets "globals_css" %}
<link rel="stylesheet" href="{{ ASSET_URL }}"/>
{% endassets %}
</head>
<body>
{%block data %}{% endblock %}
</body>
</html>
在 appA 或 appB 中,我扩展了基础 html 文件,并在扩展代码块中添加了我的特定静态资产。
{% extends "base.html" %}
{% block data %}
{% assets "appA_js" %}
<script type="text/javascript" src="{{ ASSET_URL }}"></script>
{% endassets %}
{% assets "appA_css" %}
<link rel="stylesheet" href="{{ ASSET_URL }}"/>
{% endassets %}
{% endblock %}
现在appA/appB只加载各自的静态文件。
谢谢!
我以前做过,但我完全忘记了我是怎么做到的。 我正在开发一个烧瓶服务器,其中包含多个应用程序,静态文件捆绑在一起,但我希望每个应用程序的静态文件夹中的 js/css 文件仅供该应用程序的 init.py 文件中定义的路由使用。
假设我有一个 appA 和 appB:
app
- static // this contains my common js/css files
- apps
- appA
- __init__.py
- static // appA's js/css files
- appB
- __init__.py
- static // appB's js/css files
然后我去 "localhost:8000:/appA"(假设它是我定义的路线)。在它的 js 文件中我有
$(document).ready(function(params) {
console.log('appA ready');
});
如果我转到 "localhost:8000/appB",它的 js 文件中有
$(document).ready(function(params) {
console.log('appB ready');
});
无论我选择哪条路线 运行 我都会在控制台中看到 "appA ready" 和 "appB ready" 打印出来。 现在我知道这是有道理的。毕竟我已经将它们捆绑在一起并缩小了。但就我的生活而言,我知道我过去使用过捆绑包,但能够挑出哪个应用程序使用了哪个静态文件。
重点是对常用内容使用基本静态目录,对 app-specific 内容使用应用程序的静态目录。
我的资产是这样配置的
from app.apps.appA import appA
from app.apps.appA import appA_js, appA_css
from app.apps.appB import appB
from app.apps.appB import appB_js, appB_css
flask_app.register_blueprint(appA)
flask_app.register_blueprint(appB)
globals_js = ('js/utils/jquery-3.4.1.min.js',
'js/utils/socket.io.js',
'js/utils/*.js')
globals_css = ('css/utils/common.css',
'css/utils/*.css')
assets = Environment(flask_app)
bundle_globals_js = Bundle(*globals_js + appA_js + appB_js, filters='jsmin', output='dist/local_js.js')
bundle_globals_css = Bundle(*globals_css + appA_css + appB_css, filters='cssmin', output='dist/local_css.css')
assets.register('base_js', bundle_globals_js)
assets.register('base_css', bundle_globals_css)
我觉得我的资产包配置有问题。要么就是这样,要么就是我在 html.
中导入文件的方式<head>
{% assets "base_js" %}
<script type="text/javascript" src="{{ ASSET_URL }}"></script>
{% endassets %}
{% assets "base_css" %}
<link rel="stylesheet" href="{{ ASSET_URL }}"/>
{% endassets %}
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>{{title}}</title>
</head>
这是每个特定 html 文件 appA 和 appB 所使用的 header 代码。 这里可能只是对如何使用 bundle 存在根本性的误解。 我只想指定一个公共静态目录,但能够让我的应用程序使用自己的 js/css 文件与这些基本文件结合使用。
有人能给我指出正确的方向吗?
谢谢!
我想出来了,虽然不是我记得的那样。
而不是将我所有的静态文件捆绑在一起作为 "base_js" 或 "base_css" 包, 我创建了具有唯一名称的单独包。
bundles = {
'globals_js': Bundle('js/utils/jquery-3.4.1.min.js',
'js/utils/socket.io.js',
'js/utils/*.js',
filters='jsmin',
output='dist/local_global_js.js'),
'globals_css': Bundle('css/utils/common.css',
'css/utils/*.css',
filters='cssmin',
output='dist/local_global_css.css'),
'appA_js': Bundle(*appA_js,
filters='jsmin',
output='dist/local_appA_js.js'),
'appA_css': Bundle(*appA_css,
filters='cssmin',
output='dist/local_appA_css.css'),
'appB_js': Bundle(*appB_js,
filters='jsmin',
output='dist/local_appB_js.js'),
'appB_css': Bundle(*appB_css,
filters='cssmin',
output='dist/local_appB_css.css')
}
现在我指定一个基础 html 文件,在头部添加全局资源
<head>
{% assets "globals_js" %}
<script type="text/javascript" src="{{ ASSET_URL }}"></script>
{% endassets %}
{% assets "globals_css" %}
<link rel="stylesheet" href="{{ ASSET_URL }}"/>
{% endassets %}
</head>
<body>
{%block data %}{% endblock %}
</body>
</html>
在 appA 或 appB 中,我扩展了基础 html 文件,并在扩展代码块中添加了我的特定静态资产。
{% extends "base.html" %}
{% block data %}
{% assets "appA_js" %}
<script type="text/javascript" src="{{ ASSET_URL }}"></script>
{% endassets %}
{% assets "appA_css" %}
<link rel="stylesheet" href="{{ ASSET_URL }}"/>
{% endassets %}
{% endblock %}
现在appA/appB只加载各自的静态文件。
谢谢!