mirror of
https://github.com/django/django.git
synced 2025-10-26 15:16:09 +00:00
Fixed #12747 -- Made reason phrases customizable.
This commit is contained in:
@@ -20,6 +20,65 @@ from django.utils.http import cookie_date
|
||||
from django.utils.six.moves import map
|
||||
|
||||
|
||||
# See http://www.iana.org/assignments/http-status-codes
|
||||
REASON_PHRASES = {
|
||||
100: 'CONTINUE',
|
||||
101: 'SWITCHING PROTOCOLS',
|
||||
102: 'PROCESSING',
|
||||
200: 'OK',
|
||||
201: 'CREATED',
|
||||
202: 'ACCEPTED',
|
||||
203: 'NON-AUTHORITATIVE INFORMATION',
|
||||
204: 'NO CONTENT',
|
||||
205: 'RESET CONTENT',
|
||||
206: 'PARTIAL CONTENT',
|
||||
207: 'MULTI-STATUS',
|
||||
208: 'ALREADY REPORTED',
|
||||
226: 'IM USED',
|
||||
300: 'MULTIPLE CHOICES',
|
||||
301: 'MOVED PERMANENTLY',
|
||||
302: 'FOUND',
|
||||
303: 'SEE OTHER',
|
||||
304: 'NOT MODIFIED',
|
||||
305: 'USE PROXY',
|
||||
306: 'RESERVED',
|
||||
307: 'TEMPORARY REDIRECT',
|
||||
400: 'BAD REQUEST',
|
||||
401: 'UNAUTHORIZED',
|
||||
402: 'PAYMENT REQUIRED',
|
||||
403: 'FORBIDDEN',
|
||||
404: 'NOT FOUND',
|
||||
405: 'METHOD NOT ALLOWED',
|
||||
406: 'NOT ACCEPTABLE',
|
||||
407: 'PROXY AUTHENTICATION REQUIRED',
|
||||
408: 'REQUEST TIMEOUT',
|
||||
409: 'CONFLICT',
|
||||
410: 'GONE',
|
||||
411: 'LENGTH REQUIRED',
|
||||
412: 'PRECONDITION FAILED',
|
||||
413: 'REQUEST ENTITY TOO LARGE',
|
||||
414: 'REQUEST-URI TOO LONG',
|
||||
415: 'UNSUPPORTED MEDIA TYPE',
|
||||
416: 'REQUESTED RANGE NOT SATISFIABLE',
|
||||
417: 'EXPECTATION FAILED',
|
||||
418: "I'M A TEAPOT",
|
||||
422: 'UNPROCESSABLE ENTITY',
|
||||
423: 'LOCKED',
|
||||
424: 'FAILED DEPENDENCY',
|
||||
426: 'UPGRADE REQUIRED',
|
||||
500: 'INTERNAL SERVER ERROR',
|
||||
501: 'NOT IMPLEMENTED',
|
||||
502: 'BAD GATEWAY',
|
||||
503: 'SERVICE UNAVAILABLE',
|
||||
504: 'GATEWAY TIMEOUT',
|
||||
505: 'HTTP VERSION NOT SUPPORTED',
|
||||
506: 'VARIANT ALSO NEGOTIATES',
|
||||
507: 'INSUFFICIENT STORAGE',
|
||||
508: 'LOOP DETECTED',
|
||||
510: 'NOT EXTENDED',
|
||||
}
|
||||
|
||||
|
||||
class BadHeaderError(ValueError):
|
||||
pass
|
||||
|
||||
@@ -33,8 +92,9 @@ class HttpResponseBase(six.Iterator):
|
||||
"""
|
||||
|
||||
status_code = 200
|
||||
reason_phrase = None # Use default reason phrase for status code.
|
||||
|
||||
def __init__(self, content_type=None, status=None, mimetype=None):
|
||||
def __init__(self, content_type=None, status=None, reason=None, mimetype=None):
|
||||
# _headers is a mapping of the lower-case name to the original case of
|
||||
# the header (required for working with legacy systems) and the header
|
||||
# value. Both the name of the header and its value are ASCII strings.
|
||||
@@ -53,9 +113,13 @@ class HttpResponseBase(six.Iterator):
|
||||
content_type = "%s; charset=%s" % (settings.DEFAULT_CONTENT_TYPE,
|
||||
self._charset)
|
||||
self.cookies = SimpleCookie()
|
||||
if status:
|
||||
if status is not None:
|
||||
self.status_code = status
|
||||
|
||||
if reason is not None:
|
||||
self.reason_phrase = reason
|
||||
elif self.reason_phrase is None:
|
||||
self.reason_phrase = REASON_PHRASES.get(self.status_code,
|
||||
'UNKNOWN STATUS CODE')
|
||||
self['Content-Type'] = content_type
|
||||
|
||||
def serialize_headers(self):
|
||||
|
||||
Reference in New Issue
Block a user