概要

python の http.server.SimpleHTTPRequestHandler を使って Markdown をHTMLに変換する簡単なサーバを書いてみた。

目次

環境作成

mkdir markdown_server
cd markdown_server
python3 -m venv venv
source venv/bin/activate
pip install markdown

サーバを書く

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

"""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()

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