Empecé a usar el marco de prueba de Django, y todo funcionaba bien hasta que comencé a probar las páginas autenticadas.inicio de sesión() en el marco de prueba de Django
En aras de la simplicidad, digamos que esta es una prueba:
class SimpleTest(TestCase):
def setUp(self):
user = User.objects.create_user('temporary', '[email protected]', 'temporary')
def test_secure_page(self):
c = Client()
print c.login(username='temporary', password='temporary')
response = c.get('/users/secure/', follow=True)
user = User.objects.get(username='temporary')
self.assertEqual(response.context['email'], '[email protected]')
después de ejecutar esta prueba, se produce un error, y veo que la impresión de valor de retorno de inicio de sesión() devuelve verdadera, pero response.content se redirige a la página de inicio de sesión (si el inicio de sesión falla, el decorador de autenticación redirige a la página de inicio de sesión). He puesto un punto de quiebre en el decorador que hace la autenticación:
def authenticate(user):
if user.is_authenticated():
return True
return False
y realmente devuelve Falso . La línea 4 en test_secure_page() recupera correctamente al usuario.
Esta es la función de vista:
@user_passes_test(authenticate, login_url='/users/login')
def secure(request):
user = request.user
return render_to_response('secure.html', {'email': user.email})
Por supuesto, si intento iniciar sesión a través de la aplicación (fuera de la prueba), todo funciona bien.
Y publique el código de la vista que está probando. –
@ S.Lott No estaba probando mi página de inicio de sesión (aunque lo intenté también, pero eso tampoco funciona), sino el resto de la parte "segura" del sistema. Por esa razón, traté de usar login(). – kevin
@kevin. El problema es que la publicación para iniciar sesión crea una cookie que luego utiliza el cliente. Sin cookies, sin acceso seguro. AFAIK, la función 'login()' no crea la cookie y la devuelve al cliente. ¿Puedes tratar de reproducir los ejemplos en la documentación de Django y ver si funcionan para ti? –