Skip to content

Commit

Permalink
优化为实例的方式
Browse files Browse the repository at this point in the history
  • Loading branch information
dantezhu committed Oct 22, 2012
1 parent 7cbc0be commit ca48634
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 31 deletions.
6 changes: 3 additions & 3 deletions README.md
Expand Up @@ -9,16 +9,16 @@ flask's util in javascript. such as url_for etc.




from flask import Flask from flask import Flask
import flask_util_js from flask_util_js import FlaskUtilJs


app = Flask(__name__) app = Flask(__name__)


flask_util_js.install(app) fujs = FlaskUtilJs(app)




###### load flask_util.js in your html file ###### load flask_util.js in your html file


<script src="{{ url_for('flask_util_js') }}" type="text/javascript" charset="utf-8"></script> <script src="{{ fujs.path }}" type="text/javascript" charset="utf-8"></script>


###### use url_for in your js file ###### use url_for in your js file


Expand Down
6 changes: 3 additions & 3 deletions example/main.py
Expand Up @@ -7,16 +7,16 @@
from flask import Flask, Blueprint from flask import Flask, Blueprint
from flask import render_template from flask import render_template


import flask_util_js from flask_util_js import FlaskUtilJs


app = Flask(__name__) app = Flask(__name__)
app.config.from_object(__name__) app.config.from_object(__name__)


flask_util_js.install(app) fujs = FlaskUtilJs(app)


@app.route('/') @app.route('/')
def index(): def index():
return render_template('index.html') return render_template('index.html', fujs=fujs)


@app.route('/<int:myid>') @app.route('/<int:myid>')
def show_id(): def show_id():
Expand Down
5 changes: 4 additions & 1 deletion example/templates/index.html
Expand Up @@ -6,7 +6,7 @@


<title>Index</title> <title>Index</title>


<script src="{{ url_for('flask_util_js') }}" type="text/javascript" charset="utf-8"></script> <script src="{{ fujs.path }}" type="text/javascript" charset="utf-8"></script>


<script type="text/javascript" charset="utf-8"> <script type="text/javascript" charset="utf-8">
var url = flask_util.url_for('sub.bpt_index', {y:2, x:'/sdf'}); var url = flask_util.url_for('sub.bpt_index', {y:2, x:'/sdf'});
Expand All @@ -18,6 +18,9 @@
</head> </head>


<body> <body>
<p>flask_util.js:</p>
<p>path: {{ fujs.path }}</p>
<p>endpoint: {{ fujs.endpoint }}</p>


</body> </body>
</html> </html>
78 changes: 55 additions & 23 deletions flask_util_js.py
Expand Up @@ -15,10 +15,11 @@
# HomePage: http://www.vimer.cn # HomePage: http://www.vimer.cn
# #
# Created: 2012-07-09 17:23:51 # Created: 2012-07-09 17:23:51
# Version: 0.1 # Version: 0.2.0
# History: # History:
# 0.0.1 | dantezhu | 2012-07-09 17:23:51 | initialization # 0.0.1 | dantezhu | 2012-07-09 17:23:51 | initialization
# 0.1 | dantezhu | 2012-08-30 22:54:33 | 正式版本 # 0.1 | dantezhu | 2012-08-30 22:54:33 | 正式版本
# 0.2.0 | John Doe | 2012-10-22 21:53:14 | 优化为实例的方式
# #
#============================================================================= #=============================================================================
''' '''
Expand Down Expand Up @@ -119,31 +120,62 @@
{% endautoescape %} {% endautoescape %}
''' '''


def install(app): class FlaskUtilJs(object):
""" """FlaskUtilJs"""
安装到app上
"""
path = app.config.get('FLASK_UTIL_JS_PATH', FLASK_UTIL_JS_PATH)
endpoint = app.config.get('FLASK_UTIL_JS_ENDPOINT', None)


@app.route(path, endpoint=endpoint) def __init__(self, app=None):
def flask_util_js(): """init with app
org_url_map = app.url_map._rules_by_endpoint
#把重的逻辑还是放到python代码里 :app: Flask instance
url_map = dict()
for k,v in org_url_map.items(): """
url_map[k] = dict( self._app = None
rule=v[0].rule,
defaults=v[0].defaults or {}, if app:
) self.init_app(app)

def init_app(self, app):
"""
安装到app上
"""
if self._app is not None:
raise Exception('Flask-Admin is already associated with an application.')

self._app = app

path = app.config.get('FLASK_UTIL_JS_PATH', FLASK_UTIL_JS_PATH)
endpoint = app.config.get('FLASK_UTIL_JS_ENDPOINT', None)

@app.route(path, endpoint=endpoint)
def flask_util_js():
org_url_map = app.url_map._rules_by_endpoint


json_url_map = json.dumps(url_map, indent=4, ensure_ascii=False) #把重的逻辑还是放到python代码里
url_map = dict()


rv = render_template_string( for k,v in org_url_map.items():
FLASK_UTIL_JS_TPL_STRING, url_map[k] = dict(
json_url_map=json_url_map rule=v[0].rule,
) defaults=v[0].defaults or {},
)

json_url_map = json.dumps(url_map, indent=4, ensure_ascii=False)

rv = render_template_string(
FLASK_UTIL_JS_TPL_STRING,
json_url_map=json_url_map
)


return Response(rv, content_type='application/x-javascript') return Response(rv, content_type='application/x-javascript')

# 最后把数据写到实例里
self._path = path
self._endpoint = endpoint or flask_util_js.__name__

@property
def path(self):
return self._path

@property
def endpoint(self):
return self._endpoint
2 changes: 1 addition & 1 deletion setup.py
Expand Up @@ -2,7 +2,7 @@


setup( setup(
name="flask_util_js", name="flask_util_js",
version="0.1.1", version="0.2.0",
zip_safe=False, zip_safe=False,
platforms='any', platforms='any',
py_modules=['flask_util_js'], py_modules=['flask_util_js'],
Expand Down

0 comments on commit ca48634

Please sign in to comment.