Implement client-side routing

This commit is contained in:
2022-09-05 20:54:44 +02:00
parent 6f7279c049
commit c147b44b0c
6 changed files with 209 additions and 26 deletions

View File

@@ -1,10 +1,7 @@
import json
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
from starlette.config import Config
from starlette.middleware.sessions import SessionMiddleware
from starlette.responses import HTMLResponse, RedirectResponse
from authlib.integrations.starlette_client import OAuth, OAuthError
from fastapi.responses import HTMLResponse
from jinja2 import Environment, FileSystemLoader, select_autoescape
from .settings import settings
from .user import user_auth
@@ -13,8 +10,6 @@ app = FastAPI()
app.mount("/user/", user_auth)
templates = Jinja2Templates(directory="templates")
manifest = dict()
if not settings.dev_mode:
from fastapi.staticfiles import StaticFiles
@@ -23,12 +18,24 @@ if not settings.dev_mode:
manifest = json.load(f)
@app.get("/")
async def index(request: Request):
return templates.TemplateResponse(
"index.html",
{"request": request, "dev_mode": settings.dev_mode, "manifest": manifest},
)
j2env = Environment(
loader=FileSystemLoader("templates"),
autoescape=select_autoescape(),
)
index = j2env.get_template("index.html").render(
dev_mode=settings.dev_mode,
manifest=manifest,
)
@app.middleware("http")
async def index_catch_all(request: Request, call_next):
response = await call_next(request)
if response.status_code == 404:
return HTMLResponse(index)
return response
if not settings.dev_mode: