바이너리 Response
#이제 이 버퍼에다 바이너리 값을 wirte 하면 됨
buffer = io.BytesIO()
# 대충 이런느낌으로 파일 인자에 buffer 를 줘서 쓰기도 함
open(buffer, "w")
# buffer.getvalue(): bytes
# bytes 타입으로 넣어주면됨
return Response(buffer.getvalue(), media_type="image/png" )
- bytes 타입으로
Response
에 넣어줌
uvicorn-CLI 패키지 경로 문제 해결
-
이게 프로젝트 경로가 루트로 되어있어서 실행서버 코드가 루트에 없으면 패키지 경로가 달라져서 그렇다
# --app-dir설정하면 처음 서버 코드지정은 패키지 없이 uvicorn Server:server --app-dir <서버코드경로>
uvicorn log 옵션 원본
LOGGING_CONFIG: = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"default": {
"()": "uvicorn.logging.DefaultFormatter",
"fmt": "%(levelprefix)s %(message)s",
"use_colors": None,
},
"access": {
"()": "uvicorn.logging.AccessFormatter",
"fmt": '%(levelprefix)s %(client_addr)s - "%(request_line)s" %(status_code)s',
},
},
"handlers": {
"default": {
"formatter": "default",
"class": "logging.StreamHandler",
"stream": "ext://sys.stderr",
},
"access": {
"formatter": "access",
"class": "logging.StreamHandler",
"stream": "ext://sys.stdout",
},
},
"loggers": {
"uvicorn": {"handlers": ["default"], "level": "INFO", "propagate": False},
"uvicorn.error": {"level": "INFO"},
"uvicorn.access": {"handlers": ["access"], "level": "INFO", "propagate": False},
},
}
URI 리버스 프록시 구성 시 swagger 경로 문제
- 왜인지 모르겠지만 swagger 로드에 필요한
openapi.json
경로가 무조건/
이걸로 되어있어 - 최상위 URI 가
/
아닌경우 못 불러온다
해결 방법
-
서버 구성 시 root_path 설정
server = FastAPI(root_path="/리버스 프록시와 동일한 경로")
uvicorn
명령에서 수정할수도 있긴한데 redirct 발생 시 재대로 경로를 못찾아가는 문제가 있다- 다행히도
/
경로에서도 api가 문제없이 작동한다 즉/
경로나,root_path
설정한 경로 둘 다 문제 없이 작동한다