Как напечатать символ новой строки, используя http.server python3? - PullRequest
0 голосов
/ 23 июня 2018

Я пытался создать свой собственный маленький мессенджер-сервер, который работал бы по схеме PRG. Я отлично работаю, но у меня проблема с печатью символов новой строки в do_GET() каждый раз, когда приходит новое сообщение.

from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import parse_qs


class MessageHandler(BaseHTTPRequestHandler):

    html_form = """
    <!DOCTYPE html>
    <title>Message Board</title>
    <form method="POST" action="http://localhost:8000/">
        <textarea name="message"></textarea>
        <br>
        <button type="submit">Post it!</button>
    </form>
    """

    messages = []

    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html; charset=utf-8')
        self.end_headers()
        self.wfile.write(self.html_form.encode())
        for m in self.messages:
            self.wfile.write((m+"\n").encode())


    def do_POST(self):
        # 1. How long was the message? (Use the Content-Length header.)
        length = int(self.headers.get('content-length', 0))
        # 2. Read the correct amount of data from the request.
        data = self.rfile.read(length).decode()
        # 3. Extract the "message" field from the request data.
        message = parse_qs(data)['message'][0]
        self.messages.append(message.replace('<', '&lt;'))
        # Send the "message" field back as the response.
        self.send_response(303)
        self.send_header('Location', '/')
        self.send_header('Content-type', 'text/plain; charset=utf-8')
        self.end_headers()

if __name__ == '__main__':
    server_address = ('', 8000)
    httpd = HTTPServer(server_address, MessageHandler)
    httpd.serve_forever()

1 Ответ

0 голосов
/ 23 июня 2018

Я узнал, как решить эту проблему.Очевидно, этот «сервер» печатает все в браузере, поэтому символ новой строки должен быть в формате HTML '<br>' или '<br />'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...