33import uvicorn
44import json
55from fastapi import FastAPI , Request , Response , status , Form , HTTPException
6+ from starlette .exceptions import HTTPException as StarletteHTTPException
67from fastapi .responses import HTMLResponse , RedirectResponse
78from fastapi .staticfiles import StaticFiles
89from fastapi .templating import Jinja2Templates
@@ -327,5 +328,25 @@ def post_api_report(response: Response,
327328 return RedirectResponse (f"{ baseURL } ?alert=success" , status_code = status .HTTP_303_SEE_OTHER )
328329
329330
331+ """
332+ ----------------------------------------------------------
333+ RUNNER & ERROR HANDLER
334+ ----------------------------------------------------------
335+ """
336+
337+ @app .exception_handler (StarletteHTTPException )
338+ async def my_custom_exception_handler (request : Request , exc : StarletteHTTPException ):
339+ """
340+ Handles exceptions and redirects to correct error page.
341+ """
342+
343+ if exc .status_code == 404 :
344+ return templates .TemplateResponse ("error.html" , {"request" : request , "code" : "404" , "description" : "The requested resource couldn't be found." })
345+ elif exc .status_code == 500 :
346+ return templates .TemplateResponse ("error.html" , {"request" : request , "code" : "500" , "description" : exc .detail })
347+ else :
348+ return templates .TemplateResponse ('error.html' , {"request" : request , "code" : "Error" , "description" : exc .detail })
349+
350+
330351if __name__ == "__main__" :
331352 uvicorn .run (app , host = "localhost" , port = 8000 )
0 commit comments