diff options
| author | Andrew <saintruler@gmail.com> | 2019-07-18 23:12:10 +0400 |
|---|---|---|
| committer | Andrew <saintruler@gmail.com> | 2019-07-18 23:12:10 +0400 |
| commit | 70c3b1e1c5e1bbc354fe5961bae613bd23c4d8a2 (patch) | |
| tree | e13b70feca0d8cdb10ced6fac91456990ae3f661 /day9/task5_vue/backend/server.py | |
| parent | 473318701040f238fcbef81a404b069b68d64237 (diff) | |
Переписал приложение на Vue. Изменена верстка.
Diffstat (limited to 'day9/task5_vue/backend/server.py')
| -rw-r--r-- | day9/task5_vue/backend/server.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/day9/task5_vue/backend/server.py b/day9/task5_vue/backend/server.py new file mode 100644 index 0000000..48d5946 --- /dev/null +++ b/day9/task5_vue/backend/server.py @@ -0,0 +1,73 @@ +from http.server import HTTPServer, BaseHTTPRequestHandler +from urllib.parse import parse_qs + +from backend.router import run +from backend.utils import parse_multipart_form + +import logging +import json + + +class MyHTTPRequestHandler(BaseHTTPRequestHandler): + def _set_response(self, code, content_type): + self.send_response(code) + self.send_header('Content-type', content_type) + self.end_headers() + + def do_GET(self): + try: + content_length = int(self.headers['Content-Length']) + get_data = parse_qs(self.rfile.read(content_length).decode('utf-8')) + except TypeError: + get_data = {} + + for key in get_data: + get_data[key] = get_data[key][0] + + self.finalize_request(run({ + 'url': self.path, + 'method': 'GET', + 'query': get_data + })) + + def do_POST(self): + content_length = int(self.headers['Content-Length']) + content_type = self.headers['Content-type'] + post_data = self.rfile.read(content_length) + + if content_type.split(';')[0] == 'multipart/form-data': + files = parse_multipart_form(post_data) + self.finalize_request(run({ + 'url': self.path, + 'method': 'POST', + 'query': {'files': files} + })) + + elif content_type.split(';')[0] in ['text/plain', 'application/x-www-form-urlencoded']: + post_data = parse_qs(post_data.decode('utf-8')) + for key in post_data: + post_data[key] = post_data[key][0] + + self.finalize_request(run({ + 'url': self.path, + 'method': 'POST', + 'query': post_data + })) + + elif content_type.split(';')[0] == 'application/json': + self.finalize_request(run({ + 'url': self.path, + 'method': 'POST', + 'query': json.loads(post_data.decode('utf-8')) + })) + + def finalize_request(self, response): + self._set_response(response.status_code, response.content_type) + self.wfile.write(response.content) + + +def start_server(host, port): + server_address = (host, port) + httpd = HTTPServer(server_address, MyHTTPRequestHandler) + logging.getLogger('tableApp').info(f'Server started on {host}:{port}') + httpd.serve_forever() |