42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
from pathlib import Path
|
|
|
|
from fastapi import FastAPI
|
|
from fastapi.responses import FileResponse
|
|
from fastapi.staticfiles import StaticFiles
|
|
|
|
from app.config import UPLOAD_DIR
|
|
from app.database import init_db
|
|
from app.routers import web, api
|
|
|
|
app = FastAPI(title="Mailova 星笺")
|
|
|
|
UPLOAD_DIR.mkdir(exist_ok=True)
|
|
STATIC_DIR = Path(__file__).resolve().parent / "static"
|
|
|
|
|
|
# Cache-Control for uploaded images (30 days, immutable — filenames contain UUID)
|
|
@app.middleware("http")
|
|
async def cache_control_middleware(request, call_next):
|
|
response = await call_next(request)
|
|
if request.url.path.startswith("/uploads/"):
|
|
response.headers["Cache-Control"] = "public, max-age=2592000, immutable"
|
|
return response
|
|
|
|
|
|
@app.get("/favicon.ico")
|
|
async def favicon():
|
|
return FileResponse(STATIC_DIR / "favicon.ico", media_type="image/x-icon")
|
|
|
|
|
|
app.mount("/static", StaticFiles(directory=str(STATIC_DIR)), name="static")
|
|
app.mount("/uploads", StaticFiles(directory=str(UPLOAD_DIR)), name="uploads")
|
|
|
|
app.include_router(web.router)
|
|
app.include_router(api.router)
|
|
|
|
init_db()
|
|
|
|
if __name__ == "__main__":
|
|
import uvicorn
|
|
uvicorn.run("app.main:app", host="0.0.0.0", port=8000, reload=True)
|