views:

344

answers:

2

Last couple of days we were discussing at another question the best to manage randomness in a RESTful way; today I went to play a little bit with some ideas in Django only to find that there is no easy standard way of returning a 303 response (nor a 300 one, btw), that is, there doesn't seem to exist an HttpResponseSeeOther inside django.HTTP or in another place.

Do you know any means for achieving this?

+7  A: 

You could just override HttpResponse, like the other Responses do:

class HttpResponseSeeOther(HttpResponseRedirect):
    status_code = 303

Edit: Location field is required, so I've overridden HttpResponseRedirect.

Gerald Kaszuba
You could also file this as a ticket with a patch.
Gerald Kaszuba
+3  A: 

The generic HttpResponse object lets you specify any status code you want:

response = HttpResponse(content="", status=303)
response["Location"] = "http://example.com/redirect/here/"

If you need something re-usable then Gerald's answer is definitely valid; simply create your own HttpResponseSeeOther class. Django only provides these specific classes for a few of the most common status codes.

nezroy