rewrited logic structure
This commit is contained in:
43
group_system/http/static_files.py
Normal file
43
group_system/http/static_files.py
Normal file
@@ -0,0 +1,43 @@
|
||||
"""静态页面与资源文件服务。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from http import HTTPStatus
|
||||
from http.server import BaseHTTPRequestHandler
|
||||
from pathlib import Path
|
||||
|
||||
from group_system.config import STATIC_DIR
|
||||
|
||||
CONTENT_TYPES = {
|
||||
".html": "text/html; charset=utf-8",
|
||||
".htm": "text/html; charset=utf-8",
|
||||
".css": "text/css; charset=utf-8",
|
||||
".js": "text/javascript; charset=utf-8",
|
||||
".mjs": "text/javascript; charset=utf-8",
|
||||
".svg": "image/svg+xml",
|
||||
".png": "image/png",
|
||||
}
|
||||
|
||||
|
||||
def send_text(handler: BaseHTTPRequestHandler, status: int, text: str) -> None:
|
||||
body = text.encode("utf-8")
|
||||
handler.send_response(status)
|
||||
handler.send_header("Content-Type", "text/plain; charset=utf-8")
|
||||
handler.send_header("Content-Length", str(len(body)))
|
||||
handler.end_headers()
|
||||
handler.wfile.write(body)
|
||||
|
||||
|
||||
def serve_file(handler: BaseHTTPRequestHandler, path: Path) -> None:
|
||||
path = path if path.is_absolute() else STATIC_DIR / path
|
||||
if not path.is_file():
|
||||
send_text(handler, HTTPStatus.NOT_FOUND, "Not Found")
|
||||
return
|
||||
content_type = CONTENT_TYPES.get(path.suffix.lower(), "application/octet-stream")
|
||||
content = path.read_bytes()
|
||||
handler.send_response(HTTPStatus.OK)
|
||||
handler.send_header("Content-Type", content_type)
|
||||
handler.send_header("Content-Length", str(len(content)))
|
||||
handler.send_header("Cache-Control", "no-cache")
|
||||
handler.end_headers()
|
||||
handler.wfile.write(content)
|
||||
Reference in New Issue
Block a user