колба перед запросом – добавление исключения для определенного маршрута

в моей функции before_request (), я хочу перенаправить пользователя в / login, если они еще не вошли в систему. Есть ли специальная переменная, которая даст мне текущий URL-адрес, который будет работать в соответствии с приведенным ниже примером?

@app.before_request def before_request(): # the variable current_url does not exist # but i want something that works like it if (not 'logged_in' in session) and (current_url != '/login'): return redirect(url_for('login')) 

мне нужно проверить, что текущий URL-адрес «/ login», потому что, если я не сервер, он переходит в бесконечный цикл.

благодаря!

3 Solutions collect form web for “колба перед запросом – добавление исключения для определенного маршрута”

Есть несколько свойств объекта запроса, который вы можете проверить, задокументированный здесь , request.path – это, вероятно, то, что вы хотите. Могу ли я предложить request.endpoint , так что вы будете защищены, если вы решите направить свое мнение на другой URL-адрес или несколько URL-адресов

 @app.before_request def before_request(): if 'logged_in' not in session and request.endpoint != 'login': return redirect(url_for('login')) 

Вы можете использовать декоратор. Вот пример того, как проверять ключ api перед специальными запросами

 from functools import wraps def require_api_key(api_method): @wraps(api_method) def check_api_key(*args, **kwargs): apikey = request.headers.get('ApiKey') if apikey and apikey == SECRET_KEY: return api_method(*args, **kwargs) else: abort(401) return check_api_key 

И вы можете использовать его с:

 @require_api_key 

Вот реализация принятого ответа с флэшем-логином :

 @app.before_request def require_authorization(): from flask import request from flask.ext.login import current_user if not (current_user.is_authenticated or request.endpoint == 'login'): return login_manager.unauthorized() 
  • Python Fabric - нет хостов. Укажите (единственную) строку хоста для подключения:
  • Как установить self.maxDiff в нос, чтобы получить полный выход diff?
  • Печать определенных строк разного цвета с помощью termcolor.colored?
  • Эквивалент шаблонного контекста в Pyramid (пользователь pylons)
  • какая разница между dir и __dict__ в python
  • Python: как получить информацию о классе из объекта 'frame'?
  • Как округлить экземпляр Python Decimal
  • Попытка исправить мою функцию
  • Python - лучший язык программирования в мире.