Check if a function has a decorator
decorator, django, login-required, python
Solution
Build your own `login_required` decorator and have it mark the function as decorated--probably the best place to mark it would be in the `func_dict`.
from django.contrib.auth.decorators import login_required as django_l_r
# Here you're defining your own decorator called `login_required`
# it uses Django's built in `login_required` decorator
def login_required(func):
decorated_func = django_l_r(func)
decorated_func.func_dict['login_is_required'] = True
return decorated_func
@login_required # Your decorator
def authenticatedd_view(request):
pass
def unauthenticated_view(request):
pass
Now you can check to see if a view was decorated like this...
# Assume `a_view` is view function
>>> a_view.func_dict.get('login_is_required',False)
If you're confused about Python decorators see this SO question/answer: How to make a chain of function decorators?
Problem
My question is a general one, but specifically my application is the login_required decorator for Django. I'm curious if there is a way to check if a view/function has a specific decorator (in this case the login_required decorator) I am redirecting after logging a user out, and I want to redirect to the main page if the page they are currently on has the login_required decorator. My searches have yielded no results so far.