본문 바로가기
카테고리 없음

FASTAPI HTML 파일 초간단 전송 방법 ( 복붙하세요 )

by IT_traveler 2022. 12. 30.

안녕하세요

요즘 개인 프로젝트로 FASTAPI 재진행하고 있는데 아파서 쉬다 돌아왔습니다

여튼 거두절미하고 바로 진행하죠

 

from fastapi import FastAPI
from fastapi.responses import StreamingResponse
from fastapi import Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
import pymysql
from pydantic import BaseModel

이건 FASTAPI 이용할 때 주로 쓰는 여러 코드인데 쓸모없는게 몇게 섞여있지만 이거 한번 쳐두면

HTML 바로 전송하는 거 처리는 간단해집니다

 

from fastapi import APIRouter ( 이런거 요즘 안 씁니다 ( 구버전 문법 )) 

 

FASTAPI 공식 문서에 따르면 JINJA2 라는 패키지에다 TEMPLATES 폴더 안에 데이터를 넣어서 전송하는데

그냥 Flask 안에 있는 templates 와 같은거에요

 

pip install jinja2


이거 터미널에 쳐서 jinja2 추가해주세요

 

그 다음에는 더 간단합니다

templates 폴더 생성해주세요 ( 이름 바꾸면 아래 명령에 있는 DIRECTORY 값 바꾸세요

 

저는 static 이 같이 있지만 얘는 다른 기능 하는 거라 상관 없습니다 ( 웹스토리지 같은 용 )

만들래서 만들었더니 쓸모 없;;

 

templates = Jinja2Templates(directory="templates")

이거 한줄 넣어서 index.html 넣어두세요

 

이게 templates 는 jinja2 템플릿에 있는 거고 디렉토리를 현재 작업 폴더에 있는 templates 폴더로 한다는 뜻)

 

app = FastAPI(docs_url="/documentation", redoc_url=None)
 
app = FastAPI() 해 주세요
( 참고로 뒤에 붙은 DOCS 어쩌고 하는 건 공식 문서에 있는 /docs URL 차단하는 그런겁니다
이거 두면 막히더라구요
 
@app.get("/")
async def home(request: Request):
    return templates.TemplateResponse("index.html",{"request":request})

 

이거는 아까 선언한 app에 get 요청으로 / 주소에 오면 async로

templates 폴더 안에 있는 index.html 을 보낸다 이런 뜻으로 이거 넣고

 

( 아 저는 app.py가 파이썬 이름이라서 app:app 입니다 )

uvicorn app:app --reload 하면 서버 띄워줍니다

서버 완성 ★

 

마지막 전문 ( 그냥 이거 복붙하세요 )

# html fastapi 전송방법

from fastapi import FastAPI
from fastapi.responses import StreamingResponse
from fastapi import Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
import pymysql
from pydantic import BaseModel

templates = Jinja2Templates(directory="templates")

 

app = FastAPI(docs_url="/documentation", redoc_url=None)

 

@app.get("/")
async def home(request: Request):
    return templates.TemplateResponse("index.html",{"request":request})