Django Test Client post () gibt 302 zurück, obwohl bei der Anzeige von post () ein Fehler aufgetreten ist

Momentan schreibe ich einige grundlegende Tests, um sicherzustellen, dass Seiten in einer mittelgroßen Django-Anwendung korrekt abgerufen und gepostet werden. Die Verwendung von django.test.client.Client schlägt jedoch nicht zuverlässig fehl, wenn dies der Fall sein sollte. Es gibt eine 302-Antwort zurück, auch wenn in meinem Code offensichtlich Fehler enthalten sind.

in meiner App / urls.py:

url(r'^mymodel/create/

Bei dem Versuch, absichtlich eine 500-Antwort zu erstellen, habe ich dann Folgendes ausgeführt:

class MyModelCreateView(MyModelView, CreateView):

    def post(self, request, *args, **kwargs):
        print self.hello
        self.object = MyModel()
        return super(MyModelCreateView, self).post(request, *args, **kwargs)

Offensichtlich hat die Ansicht kein Objekt namens Hallo. Dies schlägt erwartungsgemäß fehl, wenn versucht wird, die Anforderung über den Browser zu senden.

und ging sogar so weit, "print self.hello" durch zu ersetzen

return HttpResponse(status = 500)

und doch bekomme ich noch folgendes:

#We have a model called Client, so it 
#is imported as RequestClient to avoid conflicts
In [1]: from django.test.client import Client as RequestClient

In [2]: client = RequestClient()

In [3]: response = client.post("/app/mymodel/create/")

In [4]: response.status_code
Out[4]: 302

Hier liegt das Problem eindeutig zwischen der Tastatur und dem Stuhl, da Client () / RequestClient () keinen Grund hat, einen 500-Fehler zurückzugeben, wenn er korrekt ausgeführt wird. Es treten sogar einige Probleme auf, wenn ich 302 Antworten für POST-Anforderungen anstelle von 200 Antworten erhalte. Dies kann jedoch daran liegen, dass wir HttpRedirect verwenden.

Weiß da draußen jemand, woran das liegen könnte? Als Referenz bin ich auf Python 2.7 und Django 1.5 (obwohl ich möglicherweise mit Django 1.4 kompatibel sein muss).

, views.MyModelView.as_view(), name = 'my_model_create'),

Bei dem Versuch, absichtlich eine 500-Antwort zu erstellen, habe ich dann Folgendes ausgeführt:

class MyModelCreateView(MyModelView, CreateView):

    def post(self, request, *args, **kwargs):
        print self.hello
        self.object = MyModel()
        return super(MyModelCreateView, self).post(request, *args, **kwargs)

Offensichtlich hat die Ansicht kein Objekt namens Hallo. Dies schlägt erwartungsgemäß fehl, wenn versucht wird, die Anforderung über den Browser zu senden.

und ging sogar so weit, "print self.hello" durch zu ersetzen

return HttpResponse(status = 500)

und doch bekomme ich noch folgendes:

#We have a model called Client, so it 
#is imported as RequestClient to avoid conflicts
In [1]: from django.test.client import Client as RequestClient

In [2]: client = RequestClient()

In [3]: response = client.post("/app/mymodel/create/")

In [4]: response.status_code
Out[4]: 302

Hier liegt das Problem eindeutig zwischen der Tastatur und dem Stuhl, da Client () / RequestClient () keinen Grund hat, einen 500-Fehler zurückzugeben, wenn er korrekt ausgeführt wird. Es treten sogar einige Probleme auf, wenn ich 302 Antworten für POST-Anforderungen anstelle von 200 Antworten erhalte. Dies kann jedoch daran liegen, dass wir HttpRedirect verwenden.

Weiß da draußen jemand, woran das liegen könnte? Als Referenz bin ich auf Python 2.7 und Django 1.5 (obwohl ich möglicherweise mit Django 1.4 kompatibel sein muss).

Antworten auf die Frage(1)

Ihre Antwort auf die Frage