Ich habe eine Django-Ansicht, die einen Abfrageparameter verwendet, um eine Inhaltsfilterung durchzuführen. Etwas wie folgt aus:Testen von Anforderungsparametern in Django ("+" verhält sich anders)
/page/?filter=one+and+two
/page/?filter=one,or,two
ich bemerkt habe, dass Django die +
in einen Raum konvertiert (request.GET.get('filter')
kehrt one and two
), und ich bin mit dem OKAY. Ich muss nur die split()
Funktion anpassen, die ich in der Ansicht entsprechend verwende.
Aber ...
Wenn ich versuche, diese Ansicht zu testen, und ich rufe:
from django.test import Client
client = Client()
client.get('/page/', {'filter': 'one+and+two'})
request.GET.get('filter')
kehrt one+and+two
: mit Pluszeichen und keine Leerzeichen. Warum ist das?
Ich würde gerne denken, dass Client().get()
imitiert das Verhalten des Browsers, so was ich gerne verstehen würde, warum Anruf client.get('/page/', {'filter': 'one+and+two'})
ist nicht wie Surfen zu /page/?filter=one+and+two
. Zu Testzwecken sollte es meiner Meinung nach gleich sein, und in beiden Fällen sollte die Ansicht einen konsistenten Wert für Filter erhalten: sei es mit +
oder mit Leerzeichen.
Was ich nicht verstehe ist, warum es zwei verschiedene Verhaltensweisen gibt.
Ok, also muss ich 'client.get ('/ page /', {'filter': 'eins zwei drei'})' in meinen Tests verwenden, so wie ich es gemacht habe. Meine Sorge war, dass dies nicht konsistent erscheint (wenn "Client" einen Browser nachahmt). Es sollte 'client.get ('/ page /', {'filter': 'eins + zwei + drei'})' meiner Meinung nach sein. Aber ich denke, so wird 'Client' entworfen. Danke trotzdem! – eillarra
@Eeillarra: Es ist konsistent mit der Darstellung der Daten in einer Django-Ansicht. Wie die Daten herumgereicht werden (kodiert in einer Query-Zeichenfolge), spielt dort keine Rolle. –