Как создать 303 Http-ответ в Django?

Последние пару дней мы обсуждали в еще один вопрос, чтобы лучше управлять случайностью в RESTful пути; сегодня я немного поиграл с некоторыми идеями в Django, но обнаружил, что нет простого стандартного способа возвращения ответа 303 (а не 300 одного, кстати), то есть, похоже, нет HttpResponseSeeOther внутри django.HTTP или в другом месте.

Знаете ли вы какие-либо средства для достижения этого?

Ответ 1

Вы можете просто переопределить HttpResponse, как и другие ответы:

class HttpResponseSeeOther(HttpResponseRedirect):
    status_code = 303

return HttpResponseSeeOther('/other-url/')

Ответ 2

Общий объект HttpResponse позволяет указать любой код состояния, который вы хотите:

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

Если вам нужно что-то повторно используемое, тогда ответ Джеральда определенно действителен; просто создайте свой собственный класс HttpResponseSeeOther. Django предоставляет только эти определенные классы для нескольких наиболее распространенных кодов состояния.