В Flask я могу создать фильтр «до» внутри фабрики приложений, только если использую @app.before_request
и включить весь код фильтра «* 1002» до »внутри фабрики приложений .
Когда я перемещаю logi c в функцию (register_before_request
) и вызываю эту функцию из фабрики приложений, она нарушает стилизацию всех страниц и выдает ошибку в консоль JS.
Вот код, который работает:
def create_app(config_object=ProdConfig):
"""
An application factory, as explained here:
http://flask.pocoo.org/docs/patterns/appfactories/
"""
app = Flask(__name__.split('.')[0])
app.config.from_object(config_object)
@app.before_request # <------------------------- this works
def make_before_request():
if current_user.is_authenticated and not current_user.status and request.endpoint not in ['main.unconfirmed']:
return redirect(url_for('main.unconfirmed'))
...
return app
Но я хочу отложить регистрацию фильтра before до отдельной функции , вызываемой из моей фабрики приложений (передача экземпляр app
с ним):
def create_app(config_object=ProdConfig):
"""
An application factory, as explained here:
http://flask.pocoo.org/docs/patterns/appfactories/
"""
app = Flask(__name__.split('.')[0])
app.config.from_object(config_object)
register_before_request(app) # <------------------------- this doesn't work
...
return app
def register_before_request(app):
"""Register before request actions."""
def make_before_request():
if current_user.is_authenticated and not current_user.status and request.endpoint not in ['main.unconfirmed']:
return redirect(url_for('main.unconfirmed'))
app.before_request(make_before_request)
По какой-то причине это приводит к тому, что любая страница (не просто main.unconfirmed
) отображается полностью не стилизованной, и с этой ошибкой в JavaScript консоль и около 6-7 перенаправлений на одну и ту же страницу:
Uncaught SyntaxError: Unexpected token '<'
Неожиданный токен, на который он ссылается, - это тег <html>
(начало веб-страницы).
Вот маршрут:
@blueprint.route('/unconfirmed/', methods=['GET'])
def unconfirmed():
return render_template('main/main_unconfirmed.html')
Почему это происходит? Я использую этот же шаблон для регистрации расширений, чертежей и прочего, и он отлично работает.