python - Flask app.before_request is not working when it moved to other module -


i'm learning flask these days.

at first, wrote whole codes in main.py, , started split codes code increase.

everything ok. @app.before_request worked when in main.py, stopped working after move code separate module.

i spent many hours catch reason, imagined yet. :(

main.py here

app = flask(__name__) app.config.from_object(settings) db = sqlalchemy()   @app.before_request def working():     user.models import user     print '### called in main ###'     g.user = user.get_by_session()   if __name__ == '__main__':     db.init_app(app)     app.register_blueprint(frontend.views.blueprint)     app.register_blueprint(user.views.blueprint)     import frontend.helpers     app.run() 

and frontend/helpers.py

from flask import g main import app user.models import user  @app.before_request def not_working():     print '### called in frontend.helpers ###'     g.user = user.get_by_session() 

the result shows @app.before_request in frontend/helpers.py not called.

127.0.0.1 - - [30/sep/2015 15:55:35] "get /login http/1.1" 200 - ### called in main ### 

how can work well?

if running main.py main entry script command line, whole namespace of module stored in __main__ module, not main module. why if __name__ == '__main__' test succeeds.

however, frontend/helpers.py module imports main, far python concerned, different module. created two distinct flask instances, each living in different module namespace.

in other words, __main__.app being used run flask server, before_request hook registered different, separate main.app object.

don't use same module run script , create flask wsgi object. use separate module this. don't try use from __main__ import app that'll break when deploy wsgi container gunicorn or mod_wsgi.


Comments

Popular posts from this blog

html - Outlook 2010 Anchor (url/address/link) -

javascript - Why does running this loop 9 times take 100x longer than running it 8 times? -

Getting gateway time-out Rails app with Nginx + Puma running on Digital Ocean -