Compruebe si una función tiene un decorador

Mi pregunta es general, pero específicamente mi aplicación es el decorador requerido para iniciar sesión para Django.

Tengo curiosidad por saber si hay una manera de verificar si una vista / función tiene un decorador específico (en este caso, el decorador login_required)

Estoy redireccionando después de cerrar la sesión de un usuario, y quiero redirigir a la página principal si la página en la que están actualmente tiene el decorador requerido para iniciar sesión Mis búsquedas no han dado resultados hasta ahora.

Cree su propio decorador login_required y login_required que marque la función como decorada, probablemente el mejor lugar para marcarlo sería en el 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 

Ahora puedes verificar si una vista fue decorada así …

 # Assume `a_view` is view function >>> a_view.func_dict.get('login_is_required',False) 

Si está confundido acerca de los decoradores de Python, vea esta pregunta / respuesta: ¿Cómo hacer una cadena de decoradores funcionales?

Parece que su situación es la siguiente: 1. Tiene páginas que están protegidas y detrás de un decorador requerido para iniciar sesión. 2. Tiene páginas que no son seguras y se pueden visitar tanto en el estado de inicio de sesión como en el estado anónimo.

Si comprendo sus requisitos, desea que se redirija a un usuario a la página principal (suponiendo que esta sea la página de bienvenida que se puede visitar en estado anónimo y con sesión iniciada) cuando un usuario cierre la sesión.

¿Por qué no limitaría la capacidad del usuario para cerrar sesión solo desde páginas seguras y luego configuraría su redirect_url para cerrar sesión en la pantalla de bienvenida?