diff options
| author | Andrew <saintruler@gmail.com> | 2019-06-29 11:34:58 +0400 |
|---|---|---|
| committer | Andrew <saintruler@gmail.com> | 2019-06-29 11:34:58 +0400 |
| commit | f757107504290d12262fcb806e14776fc9a35fa0 (patch) | |
| tree | bac7eb81ac0b16af908b7345f95d1961167e5e94 | |
| parent | 6f79071d2bdbdebc843d99760f80936885256e03 (diff) | |
Изменен метод получения HTTP статусов.day7
| -rw-r--r-- | day7/README.md | 2 | ||||
| -rw-r--r-- | day7/utils.py | 75 |
2 files changed, 71 insertions, 6 deletions
diff --git a/day7/README.md b/day7/README.md index 5527f4e..90668fb 100644 --- a/day7/README.md +++ b/day7/README.md @@ -21,7 +21,7 @@ Brand-new HTTP сервер для созданный для того, чтоб Второй способ подойдет для небольших проектов на 2-3 обработчика. -Свои функции можно писать в любом файле (В модулях самого сервера всё таки не рекомендуется, но никто не запрещает). +Свои функции можно писать в любом файле (В модулях самого сервера всё-таки не рекомендуется, но никто не запрещает). В данном случае все обработчики находятся в модуле `backend.py` и использован первый способ задания путей (Они прописаны прямо в _router_table). diff --git a/day7/utils.py b/day7/utils.py index b00c5c2..89e2e50 100644 --- a/day7/utils.py +++ b/day7/utils.py @@ -2,18 +2,83 @@ import re from time import strftime, gmtime from string import ascii_letters -HTTP_VERSION = 'HTTP/1.1' -SUCCESS = f'{HTTP_VERSION} 200 OK' -BAD_REQUEST = f'{HTTP_VERSION} 400 Bad Request' -NOT_FOUND = f'{HTTP_VERSION} 404 Not Found' -METHOD_NOT_ALLOWED = f'{HTTP_VERSION} Method Not Allowed' +HTTP_STATUS_CODES = { + 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", + 226: "IM Used", # see RFC 3229 + 300: "Multiple Choices", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 308: "Permanent Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", # unused + 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", # see RFC 2324 + 421: "Misdirected Request", # see RFC 7540 + 422: "Unprocessable Entity", + 423: "Locked", + 424: "Failed Dependency", + 426: "Upgrade Required", + 428: "Precondition Required", # see RFC 6585 + 429: "Too Many Requests", + 431: "Request Header Fields Too Large", + 449: "Retry With", # proprietary MS extension + 451: "Unavailable For Legal Reasons", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported", + 507: "Insufficient Storage", + 510: "Not Extended", +} +HTTP_VERSION = 'HTTP/1.1' HTTP_METHODS = ['GET', 'POST', 'OPTIONS', 'HEAD', 'PUT', 'PATCH', 'DELETE', 'TRACE', 'CONNECT'] URL_REGEX_PATTERN = re.compile(r'/((.*?/?)+)?') FIRST_LINE_PATTERN = re.compile(rf'{"(" + "|".join(HTTP_METHODS) + ")"} {URL_REGEX_PATTERN.pattern} HTTP/1\.[01]') +def get_status_code(code): + return f'{HTTP_VERSION} {code} {HTTP_STATUS_CODES[code]}' + + +SUCCESS = get_status_code(200) +BAD_REQUEST = get_status_code(400) +NOT_FOUND = get_status_code(404) +METHOD_NOT_ALLOWED = get_status_code(405) + + def add_text_headers(status, html: str): """ Добавляет заголовки к ответной html-странице |