1. # -*- coding:utf-8 -*-
  2. from flask import Flask, url_for
  3. app1 = Flask(__name__, static_folder='mystatic', static_url_path='/myurl', template_folder='mytemplate')
  4. app2 = Flask(__name__)
  5. app3 = Flask(__name__, static_url_path='')
  6. @app1.route('/')
  7. def hello_world():
  8. return 'Hello World!'
  9. @app1.route("/css")
  10. def static_css():
  11. return url_for('static', filename='style.css')
  12. @app1.route("/js")
  13. def static_js():
  14. return url_for('static', filename='login.js')
  15. # @app.route("/ss")
  16. # def static():
  17. # return "hello ss!"
  18. # AssertionError: View function mapping is overwriting an existing endpoint function: static
  19. # 不允许重复定义内部约束方法static
  20. if __name__ == '__main__':
  21. print("1--------------------")
  22. print(app1.__dict__)
  23. print app1.view_functions['static'].__dict__
  24. print("2--------------------")
  25. print app2.__dict__
  26. print("3--------------------")
  27. print app3.__dict__
  28. # app1.run()
  29. # app2.run(port=5001)
  30. # app3.run(port=5002)

目录结构


  1. flask_simply_dome
  2. -mystatic
  3. --login.js -->"this is a test login.js"
  4. -static
  5. --login.js -->"this is app3 or app2 login.js"
  6. asimply_app.py
  1. # curl "http://127.0.0.1:5000/css"
  2. /myurl/style.css
  3. # curl "http://127.0.0.1:5000/js"
  4. /myurl/login.js
  5. # curl "http://127.0.0.1:5000/myurl/login.js"
  6. "this is a test login.js"
  7. # curl "http://127.0.0.1:5001/static/login.js"
  8. "this is app3 or app2 login.js"
  9. # curl "http://127.0.0.1:5002/login.js"
  10. "this is app3 or app2 login.js"

对比各app的属性

  1. 1--------------------
  2. {
  3. 'subdomain_matching': False,
  4. 'error_handler_spec': {},
  5. '_before_request_lock': < thread.lock object at 0x0000000002619D50 > ,
  6. 'before_request_funcs': {},
  7. 'teardown_appcontext_funcs': [],
  8. 'shell_context_processors': [],
  9. 'after_request_funcs': {},
  10. 'cli': < flask.cli.AppGroup object at 0x0000000002EF0278 > ,
  11. '_blueprint_order': [],
  12. 'before_first_request_funcs': [],
  13. 'view_functions': {
  14. 'static_css': < function static_css at 0x0000000002EF87B8 > ,
  15. 'static_js': < function static_js at 0x0000000002EF8828 > ,
  16. 'hello_world': < function hello_world at 0x0000000002EF8748 > ,
  17. 'static': < bound method Flask.send_static_file of < Flask 'asimply_app' >>
  18. },
  19. 'instance_path': 'D:\\myself\\flask_simply_dome\\instance',
  20. 'teardown_request_funcs': {},
  21. 'url_value_preprocessors': {},
  22. 'config': < Config {
  23. 'JSON_AS_ASCII': True,
  24. 'USE_X_SENDFILE': False,
  25. 'SESSION_COOKIE_SECURE': False,
  26. 'SESSION_COOKIE_PATH': None,
  27. 'SESSION_COOKIE_DOMAIN': None,
  28. 'SESSION_COOKIE_NAME': 'session',
  29. 'MAX_COOKIE_SIZE': 4093,
  30. 'SESSION_COOKIE_SAMESITE': None,
  31. 'PROPAGATE_EXCEPTIONS': None,
  32. 'ENV': 'production',
  33. 'DEBUG': False,
  34. 'SECRET_KEY': None,
  35. 'EXPLAIN_TEMPLATE_LOADING': False,
  36. 'MAX_CONTENT_LENGTH': None,
  37. 'APPLICATION_ROOT': '/',
  38. 'SERVER_NAME': None,
  39. 'PREFERRED_URL_SCHEME': 'http',
  40. 'JSONIFY_PRETTYPRINT_REGULAR': False,
  41. 'TESTING': False,
  42. 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(31),
  43. 'TEMPLATES_AUTO_RELOAD': None,
  44. 'TRAP_BAD_REQUEST_ERRORS': None,
  45. 'JSON_SORT_KEYS': True,
  46. 'JSONIFY_MIMETYPE': 'application/json',
  47. 'SESSION_COOKIE_HTTPONLY': True,
  48. 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(0, 43200),
  49. 'PRESERVE_CONTEXT_ON_EXCEPTION': None,
  50. 'SESSION_REFRESH_EACH_REQUEST': True,
  51. 'TRAP_HTTP_EXCEPTIONS': False
  52. } > ,
  53. '_static_url_path': '/myurl',
  54. 'template_context_processors': {
  55. None: [ < function _default_template_ctx_processor at 0x0000000002ED9BA8 > ]
  56. },
  57. 'template_folder': 'mytemplate',
  58. 'blueprints': {},
  59. 'url_map': Map([ < Rule '/css' (HEAD, OPTIONS, GET) - > static_css > , <
  60. Rule '/js' (HEAD, OPTIONS, GET) - > static_js > , <
  61. Rule '/' (HEAD, OPTIONS, GET) - > hello_world > , <
  62. Rule '/myurl/<filename>' (HEAD, OPTIONS, GET) - > static >
  63. ]),
  64. 'name': 'asimply_app',
  65. '_got_first_request': False,
  66. 'import_name': '__main__',
  67. 'root_path': 'D:\\myself\\flask_simply_dome',
  68. '_static_folder': 'mystatic',
  69. 'extensions': {},
  70. 'url_default_functions': {},
  71. 'url_build_error_handlers': []
  72. }
  73. {}
  74. 1--------------------
  75. {
  76. 'subdomain_matching': False,
  77. 'error_handler_spec': {},
  78. '_before_request_lock': < thread.lock object at 0x0000000002619D70 > ,
  79. 'before_request_funcs': {},
  80. 'teardown_appcontext_funcs': [],
  81. 'shell_context_processors': [],
  82. 'after_request_funcs': {},
  83. 'cli': < flask.cli.AppGroup object at 0x0000000002EF03C8 > ,
  84. '_blueprint_order': [],
  85. 'before_first_request_funcs': [],
  86. 'view_functions': {
  87. 'static': < bound method Flask.send_static_file of < Flask 'asimply_app' >>
  88. },
  89. 'instance_path': 'D:\\myself\\flask_simply_dome\\instance',
  90. 'teardown_request_funcs': {},
  91. 'url_value_preprocessors': {},
  92. 'config':同上,
  93. '_static_url_path': None,
  94. 'template_context_processors': {
  95. None: [ < function _default_template_ctx_processor at 0x0000000002ED9BA8 > ]
  96. },
  97. 'template_folder': 'templates',
  98. 'blueprints': {},
  99. 'url_map': Map([ < Rule '/static/<filename>' (HEAD, OPTIONS, GET) - > static > ]),
  100. 'name': 'asimply_app',
  101. '_got_first_request': False,
  102. 'import_name': '__main__',
  103. 'root_path': 'D:\\myself\\flask_simply_dome',
  104. '_static_folder': 'static',
  105. 'extensions': {},
  106. 'url_default_functions': {},
  107. 'url_build_error_handlers': []
  108. }
  109. 2--------------------
  110. {
  111. 'subdomain_matching': False,
  112. 'error_handler_spec': {},
  113. '_before_request_lock': < thread.lock object at 0x00000000026A3DB0 > ,
  114. 'before_request_funcs': {},
  115. 'teardown_appcontext_funcs': [],
  116. 'shell_context_processors': [],
  117. 'after_request_funcs': {},
  118. 'cli': < flask.cli.AppGroup object at 0x0000000002FFB5F8 > ,
  119. '_blueprint_order': [],
  120. 'before_first_request_funcs': [],
  121. 'view_functions': {
  122. 'static': < bound method Flask.send_static_file of < Flask 'asimply_app' >>
  123. },
  124. 'instance_path': 'D:\\myself\\flask_simply_dome\\instance',
  125. 'teardown_request_funcs': {},
  126. 'url_value_preprocessors': {},
  127. 'config': 同上,
  128. '_static_url_path': '',
  129. 'template_context_processors': {
  130. None: [ < function _default_template_ctx_processor at 0x0000000002FDEBA8 > ]
  131. },
  132. 'template_folder': 'templates',
  133. 'blueprints': {},
  134. 'url_map': Map([ < Rule '/<filename>' (HEAD, OPTIONS, GET) - > static > ]),
  135. 'name': 'asimply_app',
  136. '_got_first_request': False,
  137. 'import_name': '__main__',
  138. 'root_path': 'D:\\myself\\flask_simply_dome',
  139. '_static_folder': 'static',
  140. 'extensions': {},
  141. 'url_default_functions': {},
  142. 'url_build_error_handlers': []
  143. }
  144. 3----------------------
  145. """

结论

  1. static_url_path主要用于改变urlpath的,静态文件放在static下面,所以正常情况urlstatic/filename ,但是可以通过static_url_path来改变这个url
  2. static_folder主要是用来改变url的目录的,默认是static,可以通过这个变量来改变静态文件目录。
  3. 要是项目是前后端分离的话,那这里的配置也就没影响了。

flask中static_folder与static_url_path的区别与联系的更多相关文章

  1. flask中filter和filter_by的区别

    filter_by表内部精确查询 User.query.filter_by(id=4).first() filter 全局查询 id必须指明来源于那张表User,而且需要用等号,而不是赋值 User. ...

  2. flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法

    Flask中的g对象是个很好的东西,主要用于在一个请求的过程中共享数据.可以随意给g对象添加属性来保存数据,非常的方便,下面的代码是一个使用g对象的例子.下面的这个例子会使用random随机产生一个0 ...

  3. flask中Flask()和Blueprint() flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法

    1.Blueprint()在蓝本注册函数register_blueprint()中,第一个参数为所注册的蓝本名称.当我们在应用对象上注册一个蓝图时,需要指定一个url_prefix关键字 参数(这个参 ...

  4. flask中的endpoint、自定义转化器、与djnago中session区别、利用装饰器实现登录认证

    flask路由中的endpoint 与自定义转化器 ''' endpoint主要用于 反向解析, 例如:login函数中配的路由是/login,其中endpoint='lg' 则在其他函数,可以用 u ...

  5. flask中的static_path和static_path_url和static_folder

    static_folder表示静态文件所在路径,默认为root_dir下的static文件夹 static_url_path的行为比较复杂 如果static_folder未被指定(也就是默认值stat ...

  6. flask中使用jsonify和json.dumps的区别

    一.实验 python的flask框架为用户提供了直接返回包含json格式数据响应的方法,即jsonify,在开发中会经常用到.如下一段简单的flask后端代码,服务端视图函数根据请求参数返回json ...

  7. flask中的蓝图实现模块化的应用

    Blueprint 蓝图的基本设想是当它们注册到应用上时,它们记录将会被执行的操作. 当分派请求和生成从一个端点到另一个的 URL 时,Flask 会关联蓝图中的视图函数. 简单来说,Blueprin ...

  8. Flask(2)- 装饰器的坑及解决办法、flask中的路由/实例化配置/对象配置/蓝图/特殊装饰器(中间件、重定义错误页面)

    一.装饰器的坑以及解决方法 1.使用装饰器装饰两个视图函数,代码如下 from flask import Flask, redirect, render_template, request, sess ...

  9. Flask中的蓝图(BluePrint)、

    蓝图 1.初识Flask蓝图(BluePrint) 创建一个项目然后将目录结构做成: user.py中的内容 from flask import Blueprint, render_template ...

随机推荐

  1. 【luogu P1801 黑匣子_NOI导刊2010提高(06)】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1801 替罪羊树吼啊! #include <cstdio> #include <cstrin ...

  2. ssd的BUG

    苦恼了我一周,当然最近我有事老请假,也有原因.就是查不到我训练的SSD模型问题出在哪里,loss也在下降,但是跳动比较大.测试时,有些类效果还可以,但是有些类压根检测不出来.而根据我的经验,那些类大概 ...

  3. Navicat Premium 连接Oracle 数据库之配置

    Navicat Premium连接Oracle 数据库之配置 1.Oracle数据库服务器下载 Oracle官方网站下载数据库最新版本:http://www.oracle.com/technetwor ...

  4. Plupload+easyui+springmvc实现批量上传

    demo下载(java项目):http://pan.baidu.com/s/1ntmoGEd 可兼容所有常用浏览器,当前版本为V1.5.4,如果不兼容,肯定是你没有调试好啊 1.jsp代码 <% ...

  5. Js操作DOM及获取浏览器高度以及宽度

    1.获取网页可见区域的宽度:document.body.clientWidth ; 2.获取网页可见区域的高度:document.body.clientHeight; 3.获取 网页可见区域宽:doc ...

  6. 2、开发环境搭建-window平台

    一.搭建ReactNative环境 首先安装node.js和python2.xx版本,不要装python3.xx,这个官方是特别说明的,请注意.NodeJs官方下载:https://nodejs.or ...

  7. P1247 取火柴游戏

    题目描述 输入k及k个整数n1,n2,-,nk,表示有k堆火柴棒,第i堆火柴棒的根数为ni:接着便是你和计算机取火柴棒的对弈游戏.取的规则如下:每次可以从一堆中取走若干根火柴,也可以一堆全部取走,但不 ...

  8. PHPStorm+Xdebug断点远程调试PHP xdebug安装

    一.xdebug安装 wget http://www.xdebug.org/files/xdebug-2.2.3.tgz #下载Xdebug tar xzf xdebug-2.2.3.tgz cd x ...

  9. SI - 硬件 - 服务器 - 知识科普

    服务器对每个从事IT工作的人来说并不陌生,但是服务器所涉及的各种知识细节,并非大家都十分清楚,为了让大家深入了解服务器的关键知识点,笔者特意抽时间总结了这篇科普文章,旨在帮助读者全面了解服务器.今天内 ...

  10. HTML中的【块】与【内嵌】

    块元素与内嵌元素 块的特征 默认独占一行 没有宽度时默认撑满一行 支持所有的css命令 内嵌的特征 同行可以连续跟同类的标签 内容撑开宽度 不支持宽高 不支持上下的内外边距 代码换行被解析 块与内嵌的 ...