#author("2019-12-18T15:10:43+00:00","","")
#mynavi(Python覚え書き)
#setlinebreak(on);

* 概要 [#y772906e]
#html(<div class="pl10">)
python の http.server.SimpleHTTPRequestHandler を使って Markdown をHTMLに変換する簡単なサーバを書いてみた。
#html(</div>)


* 目次 [#o25c6c15]
- 関連
-- [[Python覚え書き]]
-- [[pythonでWebサーバを書いてみる]]

* 環境作成 [#f3d33b1c]
#html(<div class="pl10">)

#myterm2(){{
mkdir markdown_server
cd markdown_server
python3 -m venv venv
source venv/bin/activate
pip install markdown
}}

#html(</div>)


* サーバを書く [#j3ccc9ba]
#html(<div class="pl10">)

https://docs.python.org/ja/3/library/http.server.html
https://docs.python.org/ja/3/library/http.server.html#http.server.SimpleHTTPRequestHandler

#mycode2(){{
"""Markdown公開用サーバ."""

import http.server
import markdown
import socketserver
import os


PORT = 8000

class MarkdownHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        path = self.path.split("?")[0][1:]
        *_, ext = path.split(".")
        if ext == "md" and os.path.exists(path):
            with open(path, "r") as f:
                lines = "\n".join(f.readlines())
                response = markdown.Markdown().convert(lines)
                response_bytes = response.encode("utf-8")
                self.send_response(HTTPStatus.OK)
                self.send_header("Content-Type", "text/html; charset=utf-8")
                self.send_header('Content-Length', len(response_bytes))
                self.end_headers()
                self.wfile.write(response)
            return
        super().do_GET()

# ポートの再利用を許可する(コレがないとしばらくの間は同じポートを利用できない)
socketserver.TCPServer.allow_reuse_address = True

with socketserver.TCPServer(("", PORT), MarkdownHandler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()
}}

#html(</div>)


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS