flask before request - add exception for specific route
Solution 1:
There are a couple of properties on the request object you can check, documented here, request.path
is probably what you want. Can I suggest request.endpoint
though, so you'll be covered should you decide to route your view to another url, or multiple urls
@app.before_request
def before_request():
if 'logged_in' not in session and request.endpoint != 'login':
return redirect(url_for('login'))
Solution 2:
You can use a decorator. Here's an example that shows how to check an API key before specific requests:
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
And you can use it with:
@require_api_key
Solution 3:
Here's an implementation of the accepted answer with flask-login:
@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()