variable template examples python django django-testing django-sessions

python - examples - django template variable



¿Cómo modifico la sesión en el marco de prueba de Django? (6)

Así es como lo hice (inspirado en una solución en http://blog.mediaonfire.com/?p=36 ).

from django.test import TestCase from django.conf import settings from django.utils.importlib import import_module class SessionTestCase(TestCase): def setUp(self): # http://code.djangoproject.com/ticket/10899 settings.SESSION_ENGINE = ''django.contrib.sessions.backends.file'' engine = import_module(settings.SESSION_ENGINE) store = engine.SessionStore() store.save() self.session = store self.client.cookies[settings.SESSION_COOKIE_NAME] = store.session_key

Después de eso, puedes crear tus pruebas como:

class BlahTestCase(SessionTestCase): def test_blah_with_session(self): session = self.session session[''operator''] = ''Jimmy'' session.save()

etc ...

Mi sitio permite que las personas contribuyan con contenido en caso de no haber iniciado sesión creando un Usuario basado en la sesión actual_key

Me gustaría configurar una prueba para mi vista, pero parece que no es posible modificar la request.session:

Me gustaría hacer esto:

from django.contrib.sessions.models import Session s = Session() s.expire_date = ''2010-12-05'' s.session_key = ''my_session_key'' s.save() self.client.session = s response = self.client.get(''/myview/'')

Pero me sale el error:

AttributeError: can''t set attribute

¿Reflexiones sobre cómo modificar la sesión del cliente antes de realizar solicitudes de obtención? He visto this y no parece funcionar


Como Andrew Austin ya mencionó, no funciona debido a este error: code.djangoproject.com/ticket/11475

Lo que puedes hacer es esto:

from django.test import TestCase from django.test.client import Client from django.contrib.auth.models import User class SessionTestCase(TestCase): def setUp(self): self.client = Client() User.objects.create_user(''john'', ''[email protected]'', ''johnpassword'') self.client.login(username=''john'', password=''johnpassword'') def test_something_with_sessions(self): session = self.client.session session[''key''] = ''value'' session.save()

Después de crear e iniciar sesión en un usuario con User.objects.create_user () y self.client.login (), como en el código anterior, las sesiones deberían funcionar.


El objeto cliente del marco de prueba de django hace posible tocar la sesión. Para más detalles, http://docs.djangoproject.com/en/dev/topics/testing/?from=olddocs#django.test.client.Client.session

Tenga cuidado: To modify the session and then save it, it must be stored in a variable first (because a new SessionStore is created every time this property is accessed)

Creo que algo como esto a continuación debería funcionar

s = self.client.session s.update({ "expire_date": ''2010-12-05'', "session_key": ''my_session_key'', }) s.save() response = self.client.get(''/myview/'')


Puede crear una vista personalizada que inserte datos ficticios, como la sesión.

La vista con la url correspondiente: / dummy /:

def dummy(request): # dummy init data request.session[''expiry_date''] = ''2010-12-05'' return HttpResponse(''Dummy data has been set successfully'')

Que en el script de prueba solo llame a self.client.get(''/dummy/'')

También utilizo esta vista ficticia para iniciar los datos ficticios en la sesión cuando se prueba manualmente.



Según los documentos, puede agregar valores a la sesión en el cliente de prueba, por ejemplo, a través de

def test_something(self): session = self.client.session session[''somekey''] = ''test'' session.save()

https://docs.djangoproject.com/en/dev/topics/testing/tools/#django.test.Client.session

Esto le permitirá probar vistas que requieren datos en la sesión para funcionar correctamente.

Así que para esta pregunta:

session = self.client.session session[''expire_date''] = ''2010-12-05'' ..... session.save()