Почему не происходит перенаправление на указанную HTML-страницу?

Рейтинг: 0Ответов: 1Опубликовано: 23.04.2023

На странице есть форма, после отправки данных и записи их в json-файл нужно чтобы просто показывалась страница error.html, но она просто зависает. Перенаправление в методе do_POST. У меня всего две страницы: message.html и error.html

class MyHandler(BaseHTTPRequestHandler):

    def do_GET(self):

        url = urlparse(self.path)

        match url.path:
            case '/':
                self.render_template('message.html')
            case '/message.html' | '/message':
                self.render_template('message.html')
            case _:
                file = pathlib.Path(FRONT_DIR + url.path)
                if file.exists():
                    self.send_static(file)
                else:
                    self.render_template('error.html', 404)

    def do_POST(self):

        raw_data = self.rfile.read()
        data = unquote_plus(raw_data.decode())
        data = self.parse_params(data)

        path = pathlib.Path(FRONT_DIR + 'storage/data.json')
        with open(path, 'w', encoding='cp1251') as file:
            json.dump(data, file, ensure_ascii=False)

        self.send_response(302)
        self.send_header('Location', 'front-init/error.html')
        self.end_headers()

    def render_template(self, html_page, status_code=200):

        self.send_response(status_code)
        self.send_header('Content-type', 'text/html')
        self.end_headers()

        path = pathlib.Path(FRONT_DIR + html_page)
        with open(path, 'rb') as file:
            self.wfile.write(file.read())

    def send_static(self, file_path, status_code=200):

        self.send_response(status_code)
        mime_type, *rest = mimetypes.guess_type(file_path)

        if mime_type:
            self.send_header('Content-type', mime_type)
        else:
            self.send_header('Content-type', 'text/plain')

        self.end_headers()

        with open(file_path, 'rb') as file:
            self.wfile.write(file.read())

Ответы

▲ 0Принят

Не указан HTTP-заголовок Content-Length

def do_POST(self):

    raw_data = self.rfile.read(int(self.headers['Content-Length']))
    self.send_data_to_socket_server(raw_data)

    self.send_response(302)
    self.send_header('Location', '/')
    self.end_headers()