#author("2019-12-18T11:52:58+00:00","","")
#author("2019-12-18T13:25:05+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
import posixpath


PORT = 8000

class MarkdownHandler(http.server.SimpleHTTPRequestHandler):
    def __init__(self, request, client_address, server):
        super().__init__(request, client_address, server)
        self.extensions_map[".md"] = "text/html; charset=utf-8"

    def do_GET(self):
        base, ext = posixpath.splitext(self.path)
        if ext == ".md" and os.path.exists(self.path[1:]):
            with open(self.path[1:], "r") as f:
                lines = "\n".join(f.readlines())
                response = markdown.Markdown().convert(lines).encode("utf-8")
                self.send_head()
                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