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.
Puedes modificar la sesión con un middleware .
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()