2016-07-29 19 views
2

Ich überprüfe eine Anfrage Header für ein gültiges Token in meiner benutzerdefinierten Middleware.Django benutzerdefinierte Middleware zu überprüfen Header-Token.Tests mit gültigen Anfrage Header-Token weiterhin fehlschlägt

class CustomTokenAuthentication(object): 

def process_request(self, request): 

    access_token = request.META.get('HTTP_TOKEN', '') 
    if AccessToken.objects.filter(token=access_token).exists(): 
     return None 
    else: 
     # return None 
     res = HttpResponse("Invalid token", status=401) 
     res["WWW-Authenticate"] = "Invalid Token" 
     return res 

scheint gut zu funktionieren, aber im einen Test zu schreiben, indem Sie einen Header HTTP_TOKEN mit einem gültigen Tokenwert und geting eine 200-Antwort fest.

meine Probe Testcode

def test_invalid_token_present(self): 
    resp = self.client.get(reverse('productlist'), **{'HTTP_TOKEN':'8742627sdfsdfsf4e3423dsd23'}) 
    self.assertEqual(resp.status_code,200) 

scheint immer zum Scheitern verurteilt.

+0

versuchen Sie "HTTP-TOKEN" beim Senden der Anfrage. – madhukar93

+0

Sorry, versuchen Sie nur 'TOKEN' statt – madhukar93

+0

schlägt immer noch fehl @EagerNoob – DeadDjangoDjoker

Antwort

3

Django benennt CUSTOM-HEADER in HTTP_CUSTOM_HEADER um. Wenn Sie es senden HTTP_TOKEN wird es in HTTP_HTTP_TOKEN im request.META dict umbenannt. Eine einfache Möglichkeit, um zu überprüfen, welche Header Sie bekommen, ist entweder Drucken request.META und überprüfen Sie die Konsole oder fügen Sie einen pdb Haltepunkt kurz vor der Überprüfung und Prüfung der request.META dict - link to relevant Django doc. So versuchen:

resp = self.client.get(reverse('productlist'), 
          **{'TOKEN':'8742627sdfsdfsf4e3423dsd23'}) 

Ich rate Ihnen, Ihre Leitungslängen zu begrenzen, so dass die Menschen müssen nicht horizontal scrollen Sie den Code zu lesen. PEP-8 schreibt eine 80-Zeichen-Grenze vor.