flask中static_folder与static_url_path的区别与联系
# -*- coding:utf-8 -*-
from flask import Flask, url_for
app1 = Flask(__name__, static_folder='mystatic', static_url_path='/myurl', template_folder='mytemplate')
app2 = Flask(__name__)
app3 = Flask(__name__, static_url_path='')
@app1.route('/')
def hello_world():
return 'Hello World!'
@app1.route("/css")
def static_css():
return url_for('static', filename='style.css')
@app1.route("/js")
def static_js():
return url_for('static', filename='login.js')
# @app.route("/ss")
# def static():
# return "hello ss!"
# AssertionError: View function mapping is overwriting an existing endpoint function: static
# 不允许重复定义内部约束方法static
if __name__ == '__main__':
print("1--------------------")
print(app1.__dict__)
print app1.view_functions['static'].__dict__
print("2--------------------")
print app2.__dict__
print("3--------------------")
print app3.__dict__
# app1.run()
# app2.run(port=5001)
# app3.run(port=5002)
目录结构
flask_simply_dome
-mystatic
--login.js -->"this is a test login.js"
-static
--login.js -->"this is app3 or app2 login.js"
asimply_app.py
# curl "http://127.0.0.1:5000/css"
/myurl/style.css
# curl "http://127.0.0.1:5000/js"
/myurl/login.js
# curl "http://127.0.0.1:5000/myurl/login.js"
"this is a test login.js"
# curl "http://127.0.0.1:5001/static/login.js"
"this is app3 or app2 login.js"
# curl "http://127.0.0.1:5002/login.js"
"this is app3 or app2 login.js"
对比各app的属性
1--------------------
{
'subdomain_matching': False,
'error_handler_spec': {},
'_before_request_lock': < thread.lock object at 0x0000000002619D50 > ,
'before_request_funcs': {},
'teardown_appcontext_funcs': [],
'shell_context_processors': [],
'after_request_funcs': {},
'cli': < flask.cli.AppGroup object at 0x0000000002EF0278 > ,
'_blueprint_order': [],
'before_first_request_funcs': [],
'view_functions': {
'static_css': < function static_css at 0x0000000002EF87B8 > ,
'static_js': < function static_js at 0x0000000002EF8828 > ,
'hello_world': < function hello_world at 0x0000000002EF8748 > ,
'static': < bound method Flask.send_static_file of < Flask 'asimply_app' >>
},
'instance_path': 'D:\\myself\\flask_simply_dome\\instance',
'teardown_request_funcs': {},
'url_value_preprocessors': {},
'config': < Config {
'JSON_AS_ASCII': True,
'USE_X_SENDFILE': False,
'SESSION_COOKIE_SECURE': False,
'SESSION_COOKIE_PATH': None,
'SESSION_COOKIE_DOMAIN': None,
'SESSION_COOKIE_NAME': 'session',
'MAX_COOKIE_SIZE': 4093,
'SESSION_COOKIE_SAMESITE': None,
'PROPAGATE_EXCEPTIONS': None,
'ENV': 'production',
'DEBUG': False,
'SECRET_KEY': None,
'EXPLAIN_TEMPLATE_LOADING': False,
'MAX_CONTENT_LENGTH': None,
'APPLICATION_ROOT': '/',
'SERVER_NAME': None,
'PREFERRED_URL_SCHEME': 'http',
'JSONIFY_PRETTYPRINT_REGULAR': False,
'TESTING': False,
'PERMANENT_SESSION_LIFETIME': datetime.timedelta(31),
'TEMPLATES_AUTO_RELOAD': None,
'TRAP_BAD_REQUEST_ERRORS': None,
'JSON_SORT_KEYS': True,
'JSONIFY_MIMETYPE': 'application/json',
'SESSION_COOKIE_HTTPONLY': True,
'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(0, 43200),
'PRESERVE_CONTEXT_ON_EXCEPTION': None,
'SESSION_REFRESH_EACH_REQUEST': True,
'TRAP_HTTP_EXCEPTIONS': False
} > ,
'_static_url_path': '/myurl',
'template_context_processors': {
None: [ < function _default_template_ctx_processor at 0x0000000002ED9BA8 > ]
},
'template_folder': 'mytemplate',
'blueprints': {},
'url_map': Map([ < Rule '/css' (HEAD, OPTIONS, GET) - > static_css > , <
Rule '/js' (HEAD, OPTIONS, GET) - > static_js > , <
Rule '/' (HEAD, OPTIONS, GET) - > hello_world > , <
Rule '/myurl/<filename>' (HEAD, OPTIONS, GET) - > static >
]),
'name': 'asimply_app',
'_got_first_request': False,
'import_name': '__main__',
'root_path': 'D:\\myself\\flask_simply_dome',
'_static_folder': 'mystatic',
'extensions': {},
'url_default_functions': {},
'url_build_error_handlers': []
}
{}
1--------------------
{
'subdomain_matching': False,
'error_handler_spec': {},
'_before_request_lock': < thread.lock object at 0x0000000002619D70 > ,
'before_request_funcs': {},
'teardown_appcontext_funcs': [],
'shell_context_processors': [],
'after_request_funcs': {},
'cli': < flask.cli.AppGroup object at 0x0000000002EF03C8 > ,
'_blueprint_order': [],
'before_first_request_funcs': [],
'view_functions': {
'static': < bound method Flask.send_static_file of < Flask 'asimply_app' >>
},
'instance_path': 'D:\\myself\\flask_simply_dome\\instance',
'teardown_request_funcs': {},
'url_value_preprocessors': {},
'config':同上,
'_static_url_path': None,
'template_context_processors': {
None: [ < function _default_template_ctx_processor at 0x0000000002ED9BA8 > ]
},
'template_folder': 'templates',
'blueprints': {},
'url_map': Map([ < Rule '/static/<filename>' (HEAD, OPTIONS, GET) - > static > ]),
'name': 'asimply_app',
'_got_first_request': False,
'import_name': '__main__',
'root_path': 'D:\\myself\\flask_simply_dome',
'_static_folder': 'static',
'extensions': {},
'url_default_functions': {},
'url_build_error_handlers': []
}
2--------------------
{
'subdomain_matching': False,
'error_handler_spec': {},
'_before_request_lock': < thread.lock object at 0x00000000026A3DB0 > ,
'before_request_funcs': {},
'teardown_appcontext_funcs': [],
'shell_context_processors': [],
'after_request_funcs': {},
'cli': < flask.cli.AppGroup object at 0x0000000002FFB5F8 > ,
'_blueprint_order': [],
'before_first_request_funcs': [],
'view_functions': {
'static': < bound method Flask.send_static_file of < Flask 'asimply_app' >>
},
'instance_path': 'D:\\myself\\flask_simply_dome\\instance',
'teardown_request_funcs': {},
'url_value_preprocessors': {},
'config': 同上,
'_static_url_path': '',
'template_context_processors': {
None: [ < function _default_template_ctx_processor at 0x0000000002FDEBA8 > ]
},
'template_folder': 'templates',
'blueprints': {},
'url_map': Map([ < Rule '/<filename>' (HEAD, OPTIONS, GET) - > static > ]),
'name': 'asimply_app',
'_got_first_request': False,
'import_name': '__main__',
'root_path': 'D:\\myself\\flask_simply_dome',
'_static_folder': 'static',
'extensions': {},
'url_default_functions': {},
'url_build_error_handlers': []
}
3----------------------
"""
结论
static_url_path主要用于改变url的path的,静态文件放在static下面,所以正常情况url是static/filename ,但是可以通过static_url_path来改变这个url
static_folder主要是用来改变url的目录的,默认是static,可以通过这个变量来改变静态文件目录。
要是项目是前后端分离的话,那这里的配置也就没影响了。
flask中static_folder与static_url_path的区别与联系的更多相关文章
- flask中filter和filter_by的区别
filter_by表内部精确查询 User.query.filter_by(id=4).first() filter 全局查询 id必须指明来源于那张表User,而且需要用等号,而不是赋值 User. ...
- flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法
Flask中的g对象是个很好的东西,主要用于在一个请求的过程中共享数据.可以随意给g对象添加属性来保存数据,非常的方便,下面的代码是一个使用g对象的例子.下面的这个例子会使用random随机产生一个0 ...
- flask中Flask()和Blueprint() flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法
1.Blueprint()在蓝本注册函数register_blueprint()中,第一个参数为所注册的蓝本名称.当我们在应用对象上注册一个蓝图时,需要指定一个url_prefix关键字 参数(这个参 ...
- flask中的endpoint、自定义转化器、与djnago中session区别、利用装饰器实现登录认证
flask路由中的endpoint 与自定义转化器 ''' endpoint主要用于 反向解析, 例如:login函数中配的路由是/login,其中endpoint='lg' 则在其他函数,可以用 u ...
- flask中的static_path和static_path_url和static_folder
static_folder表示静态文件所在路径,默认为root_dir下的static文件夹 static_url_path的行为比较复杂 如果static_folder未被指定(也就是默认值stat ...
- flask中使用jsonify和json.dumps的区别
一.实验 python的flask框架为用户提供了直接返回包含json格式数据响应的方法,即jsonify,在开发中会经常用到.如下一段简单的flask后端代码,服务端视图函数根据请求参数返回json ...
- flask中的蓝图实现模块化的应用
Blueprint 蓝图的基本设想是当它们注册到应用上时,它们记录将会被执行的操作. 当分派请求和生成从一个端点到另一个的 URL 时,Flask 会关联蓝图中的视图函数. 简单来说,Blueprin ...
- Flask(2)- 装饰器的坑及解决办法、flask中的路由/实例化配置/对象配置/蓝图/特殊装饰器(中间件、重定义错误页面)
一.装饰器的坑以及解决方法 1.使用装饰器装饰两个视图函数,代码如下 from flask import Flask, redirect, render_template, request, sess ...
- Flask中的蓝图(BluePrint)、
蓝图 1.初识Flask蓝图(BluePrint) 创建一个项目然后将目录结构做成: user.py中的内容 from flask import Blueprint, render_template ...
随机推荐
- maven学习记录四——私服 nexus
8 私服 nexus 安装nexus 启动服务 启动失败的解决方法: 登录nexus 用户名/密码 admin/admin123 仓库类型 Virtual 虚拟仓库 Proxy 代 ...
- oracle https://localhost:1158/em 无法打开
解决办法一: 首先查看本机Oracle安装路径中 portlist.ini 文件里面的端口号是多少,例如我的就是5500. 那么在浏览器中输入的地址就是:https://localhost:5500/ ...
- Python基础—11-面向对象(01)
面向对象 面向对象 与面向过程对比: 面向过程:数学逻辑的映射,学会做个好员工 面向对象:生活逻辑的映射,学会做个好领导 生活实例: 类: 人 手机 电脑 对象: 我的手机.女朋友的手机 你的那部T4 ...
- 工作流,WEB框架,UI组件网络收集整理
工作流,WEB框架,UI组件网络收集整理 在博客园上逛了好多年,随手收录了一些工作流,WEB开发框架,UI组件,现在整理一下与大家分享. 由于个人能力与精力有限,望各位园友在评论中补充,我将全部整理到 ...
- ios appstore 上架应用被拒绝原因
ios appstore 上架应用被拒绝原因 应用程序崩溃 界面布局有明显错误挂羊头卖狗头的应用包括未公开的或隐藏功能的使用私有API应用程序读取或写入数据超出其指定的容器区域以任何方式下载代码的应用 ...
- iOS开发 | 自定义不规则label
其中有一个不太规则的label: image.png 这个label顶部的两个角是圆角,底部的两个角是直角,底部还有一个小三角. 思路 CAShapeLayer联合UIBezierPath画一个不 ...
- SAP常见问题与解决办法(转)
1.A:在公司代码分配折旧表时报错? 在公司代码分配折旧表时报错,提示是“3000 的公司代码分录不完全-参见长文本” 希望各位大侠帮我看看.3000 的公司代码分录不完全-参见长文本 R: a.你把 ...
- union的两个子查询是否并行
需求描述 问题:subquery 1 union subquery2,其中union左右的两个子查询是否并行. 场景:业务中性能敏感的业务,希望能加快速度,如果数据库能两个子查询并行执行,既可以节省时 ...
- Eclipse工具查看依赖的JDK、Maven源码方法
一.Eclipse软件里查看JDK依赖源码 1.Window->Preferences->Java->Installed JREs 2.如图: 二.Eclipse软件里查看Maven ...
- 用C#实现WEB代理服务器
用C#实现Web代理服务器 代理服务程序是一种广泛使用的网络应用程序.代理程序的种类非常多,根据协议不同可以分成HTTP代理服务程序.FTP代理服务程序等,而运行代理服务程序的服务器也就相应称为HTT ...