redirect(request.referrer) - ERROR: werkzeug.routing.exceptions.BuildError: Could not build url for endpoint
При выходе из системы на страницах с @login_required
одного из двух blueprint
получаю ошибку werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'login'. Did you mean 'login_app.index' instead?
К главному файлу подключены несколько блюпринтов:
from flask import Flask
from payment_app import payment_app_bp
from login_app import login_bp
from error_handlers import errorhandler_bp
app = Flask(__name__)
app.config['SECRET_KEY'] = 'yyazaxkoaxb4w8vgj7a7p1lxfb7gee6n5hx'
app.register_blueprint(login_bp)
app.register_blueprint(payment_app_bp)
app.register_blueprint(errorhandler_bp)
if __name__ == '__main__':
app.run(debug=True)
Находясь на странице блюпринта payment_app_bp
нажимаю на logout
- функция из блюпринта login_bp
. и получаю ошибку
raise BuildError(endpoint, values, method, self)
werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'login'.
Did you mean 'login_app.index' instead?
В логауте я использую return redirect(request.referrer)
для того чтобы пользователь мог остаться на той странице, где был, когда выйдет (в тех случаях, когда это позволяют права доступа). Сама функция логаута:
@login_bp.route('/logout')
@login_required
def logout():
try:
logout_user()
flash(message=['Вы вышли из аккаунта', ''], category='success')
return redirect(request.referrer)
except Exception as e:
return f'logout Ошибка {e}'
Я понимаю, что ошибка из-за использования request.referrer
. Ошибки не было, пока я не начал использовать Blueprint
. Всё было ОК, пользователь переходил на страницу 403 если выходил из сети на страницах с @login_required
:
@payment_app_bp.route('/payment-approval')
@login_required
def get_unapproved_payments():
"""Выгрузка из БД списка несогласованных платежей"""
try:
# Check if the user has access to the "List of contracts" page
if current_user.get_role() != 1:
return abort(403)
else:
Как справиться с этой ошибкой оставив возможность пользователям оставаться на текущей страницу при выходе из системы?
Полный лог ошибки:
127.0.0.1 - - [15/Aug/2023 14:01:01] "GET /cash-inflow HTTP/1.1" 500 -
Traceback (most recent call last):
File "C:\Users\user\PycharmProjects\kpln\venv\Lib\site-packages\flask\app.py", line 2213, in __call__
return self.wsgi_app(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\kpln\venv\Lib\site-packages\flask\app.py", line 2193, in wsgi_app
response = self.handle_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\kpln\venv\Lib\site-packages\flask\app.py", line 2190, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\kpln\venv\Lib\site-packages\flask\app.py", line 1486, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\kpln\venv\Lib\site-packages\flask\app.py", line 1484, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\kpln\venv\Lib\site-packages\flask\app.py", line 1469, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\kpln\venv\Lib\site-packages\flask_login\utils.py", line 285, in decorated_view
return current_app.login_manager.unauthorized()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\kpln\venv\Lib\site-packages\flask_login\login_manager.py", line 196, in unauthorized
redirect_url = make_login_url(login_view, next_url=request.url)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\kpln\venv\Lib\site-packages\flask_login\utils.py", line 120, in login_url
base = expand_login_view(login_view)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\kpln\venv\Lib\site-packages\flask_login\utils.py", line 97, in expand_login_view
return url_for(login_view)
^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\kpln\venv\Lib\site-packages\flask\helpers.py", line 225, in url_for
return current_app.url_for(
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\kpln\venv\Lib\site-packages\flask\app.py", line 1697, in url_for
return self.handle_url_build_error(error, endpoint, values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\kpln\venv\Lib\site-packages\flask\app.py", line 1686, in url_for
rv = url_adapter.build( # type: ignore[union-attr]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\PycharmProjects\kpln\venv\Lib\site-packages\werkzeug\routing\map.py", line 950, in build
raise BuildError(endpoint, values, method, self)
werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'login'. Did you mean 'login_app.index' instead?