Bueno, hay dos maneras en que puedo pensar. En primer lugar, sería la forma "correcta", en el sentido de que no está rompiendo ninguna funcionalidad, solo agrega nuevas funcionalidades: cree su propio decorador login_required
. El problema es que Django tiene realmente metido el redireccionamiento después de la funcionalidad de inicio de sesión, y requiere muchas partes. El login_required
decorator es realmente una envoltura alrededor del user_passes_test
decorator, que a su vez llama al redirect_to_login
view, y es la vista que agrega el parametro next
a la cadena de consulta. En su decorador personalizado, puede transferir la totalidad o parte de esta funcionalidad directamente al decorador, pero deberá hacer referencia a los tres para obtener el código necesario.
El otro, y mucho más fácil opción, es la creación de algunos de middleware para eliminar la cadena de consulta si está configurado:
from django.conf import settings
from django.http import HttpResponseRedirect
class RemoveNextMiddleware(object):
def process_request(self, request):
if request.path == settings.LOGIN_URL and request.GET.has_key('next'):
return HttpResponseRedirect(settings.LOGIN_URL)
Y, a continuación, añadir la ruta de importación a que middleware para MIDDLEWARE_CLASSES
. Recuerde que en la fase de solicitud, el middleware se procesa de primero a último o de arriba hacia abajo, en otras palabras. Esto debería llegar relativamente temprano en la fase de solicitud, pero es posible que necesite jugar un poco con él para ver qué puede y qué no puede venir antes.
El único problema real con este método es que "rompe" la siguiente funcionalidad de redirección, y no de una manera muy intuitiva, si un desarrollador posterior hereda su base de código junto con un mandato para permitir la redirección, podría ser un poco desconcertante.
has_key está en desuso. use 'in' en su lugar. –
@PatrickBassut no está en desuso, está completamente eliminado en Python 3. He actualizado la respuesta para que sea compatible con python3. Python 2 está obsoleto, me pregunto por qué la gente todavía lo usa en 2017. –