Fino Django 1.2.5 ho potuto utilizzare il seguente codice per creare un utente per il test e quindi accedere in:Creare una password semplice per l'utente unittest utilizzando PASSWORD_HASHERS
class TestSomeLoginRequiredView(TestCase):
urls = 'sonloop.tests.test_urls'
def setUp(self):
self.user = User.objects.create(username='testuser',password='some_password')
def test_the_view(self):
response = self.client.get('/test_view_url/')
self.assertEqual(response.status_code,401)
self.client.login(username='testuser',password='some_password')
response = self.client.get('/test_view_url/')
self.assertEqual(response.status_code,200)
Ora utilizzando lo stesso codice con Django 1.4 non funziona più:
ValueError: Unknown password hashing algorithm 'some_password'. Did you specify it in the PASSWORD_HASHERS setting?
Ho capito che questo ha a che fare con il nuovo sistema di hashing delle password. Non uso l'impostazione PASSWORD_HASHERS, quindi Django dovrebbe utilizzare alcuni valori predefiniti.
I documenti di Django sono piuttosto scarsi su come implementare qualcosa del genere ora. Nella sezione di test non è cambiato nulla. E dalla sezione sulla creazione di password e su come hash loro, ho potuto vedere che probabilmente potrei creare una password in questo modo:
self.user = User.objects.create(username='testuser')
self.user.set_password('some_password')
Ma questo solleva solo in questo eception nella prima riga (quando si crea l'utente, non è quando si assegna la password):
ValueError: Unknown password hashing algorithm ''. Did you specify it in the PASSWORD_HASHERS setting?
Questo è un problema con Django non accettare le password vuote, così ho cambiato che a:
self.user = User.objects.create(username='testuser',password='!')
self.user.set_password('some_password')
e quindi provare a registrare l'u ser in genere:
login = self.client.login(username='testuser',password='some_password')
self.assertTrue(login)
Che ora solleva un sospiro AssertionError: False is not True
- quasi mi aspettavo che ...
La mia domanda ora è: come posso creare un utente con una password, e accedere a questo utente con il client di prova django?
Naturalmente. salva ... Grazie - così ovvio. La seconda soluzione è la più elegante, probabilmente la userò. Nel caso tu sia interessato, ho trovato una terza soluzione che ho intenzione di pubblicare adesso. – marue
Intendevi questo? Probabilmente potresti trovare anche il mio interestin ...;) – marue