Django-test-client die http-basic-auth für die post-Anforderung
jeder. Ich bin versucht, zu schreiben tests für RESTful API implementiert, die mit django-tastypie mit http-basic-auth. So, ich habe den folgenden code:
def http_auth(username, password):
credentials = base64.encodestring('%s:%s' % (username, password)).strip()
auth_string = 'Basic %s' % credentials
return auth_string
class FileApiTest(TestCase):
fixtures = ['test/fixtures/test_users.json']
def setUp(self):
self.extra = {
'HTTP_AUTHORIZATION': http_auth('testuser', 'qwerty')
}
def test_folder_resource(self):
response = self.client.get('/api/1.0/folder/', **self.extra)
self.assertEqual(response.status_code, 200)
def test_folder_resource_post(self):
response = self.client.post('/api/1.0/folder/', **self.extra)
self.assertNotEqual(response.status_code, 401)
GET-request ist gut gemacht, die Rückkehr status-code 200. Aber POST-request gibt immer 401. Ich bin sicher, ich mache etwas falsch. Irgendwelche Ratschläge?
- Vielleicht überprüfen Sie Ihre Meta: Autorisierung auf Ihre Ressource? Was bedeutet es zu sagen?
authorization = DjangoAuthorization()
- aw, Mist, ich meinte "Authentifizierung", was Sie testen hier. Der Unterschied ist die Authentifizierung == "Wer bist du", Autorisierung == "Können Sie dies tun?"
authentication = BasicAuthentication(realm=settings.SOCIAL_API_REALM)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Check-out diese Frage. Ich habe den code für die tests sowohl mit Hilfe von GET-und POST und es funktionierte. Der einzige Unterschied, den ich sehen kann, ist, dass Sie verwendet haben, base64.encodestring anstelle von base64.b64encode.
Ansonsten, wenn das nicht funktioniert, wie sind Sie mit der Durchführung der HTTP-Authentifizierung? Ich schrieb und verwenden Sie diese Funktion, decorator:
Ich gefunden habe, ein Grund für mein problem. DjangoAuthorization prüft Berechtigungen mit django premissions Rahmen, da ich ihn nicht in meinem Projekt alle post/put/delete requests von nicht superuser sind nicht. Mein schlechtes.
Trotzdem, vielen Dank an Euch, Jungs, für die Antworten.
Auf Python 3