웹 프레임워크 (25) 썸네일형 리스트형 FastAPI - 17 (보안3 - JWT) 출처: https://fastapi.tiangolo.com/tutorial/security/oauth2-jwt/ 아래의 내용은 공식 사이트의 내용을 제 경험과 생각을 추가하여 다시 정리한 것 입니다. JWT란 먼저 OAuth 2.0에서 발급되는 Bearer 토큰의 형태 중 하나가 JWT입니다. JWT 정의: JWT (JSON Web Tokens)는 JSON 객체를 긴 문자열로 인코딩하는 표준입니다. 이 문자열은 공백 없이 밀집되어 있습니다. 예시 형태: JWT는 다음과 같은 형태를 가집니다: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJ.. FastAPI - 16 (보안2 - QAuth2, Bearer) 출처: https://fastapi.tiangolo.com/tutorial/security/simple-oauth2/ 아래의 내용은 공식 사이트의 내용을 제 경험과 생각을 추가하여 다시 정리한 것 입니다. 로그인(인증)하여 토큰 받기 이전의 코드(FastAPI - 15 (보안1 - QAuth2, Bearer))를 이용하여 추가 합니다. OAuth2PasswordRequestForm를 이용 하여 username과 password 가져옵니다. 전달 된 사용자 정보로 인증을 진행 합니다. 인증이 완료되면 토큰을 생성하여 반환 하고 그렇지 않으면 HTTPException을 발생 시킵니다. 코드 from typing import Union from fastapi import Depends, FastAPI, HTT.. FastAPI - 15 (보안1 - QAuth2, Bearer) OAuth2, Bearer란 OAuth2 OAuth 2.0을 사용하면, 계정 정보(특히 비밀번호)를 직접 공유하지 않고도 여러 서비스 간에 안전하게 로그인하고 정보를 공유할 수 있습니다. 이는 인터넷에서 개인정보를 보호하는 중요한 방법 중 하나입니다. 인터넷에서의 "키(토큰)" 우리가 인터넷에서 다양한 서비스(예: 게임, 소셜 미디어, 쇼핑 앱 등)를 사용할 때, 때때로 한 서비스(예: 구글 또는 페이스북)를 사용해서 다른 서비스에 로그인하는 경우가 있습니다. 여기서 OAuth 2.0은 하나의 서비스가 다른 서비스에 '키(토큰)'를 안전하게 전달할 수 있게 해주는 역할을 합니다. "키(토큰)" 전달 과정 권한 요청: 예를 들어, '게임 A'에 '구글 계정'으로 로그인하고 싶다고 해 봅시다. 여기서 게임 .. FastAPI - 14 (의존성 주입) 출처: https://fastapi.tiangolo.com/ko/tutorial/dependencies/ 아래의 내용은 공식 사이트의 내용을 제 경험과 생각을 추가하여 다시 정리한 것 입니다. 의존성 주입(Dependency Injection) 의존성 주입은 객체가 필요로 하는 외부 리소스(의존성)를 객체 자체가 아닌 외부에서 제공하는 디자인 패턴입니다. FastAPI에서는 이 패턴을 사용하여 다양한 작업(예: 사용자 인증, 데이터베이스 연결, 설정 로드)을 처리합니다. 다시 말해 반복적인 작업을 정의하고 그것을 의존성 주입을 이용하여 사용하는 것 입니다. Depends FastAPI의 의존성 주입은 Depends를 사용합니다. 예시 코드를 통해 살펴 보겠습니다. from typing import Uni.. FastAPI - 13 (JSON 호환 인코더 / 본문 업데이트) jsonable_encoder 출처: https://fastapi.tiangolo.com/tutorial/encoder/ 아래의 내용은 공식 사이트의 내용을 제 경험과 생각을 추가하여 다시 정리한 것 입니다. jsonable_encoder는 pydantic의 BaseModel을 JSON 호환으로 변환하는 함수 입니다. JSON 호환 가능 유형은 dict, list 등이 있습니다. 예시 코드 - jsonable_encoder 사용자가 입력된 값을 Item 모델의 인스턴스로 생성하고 jsonable_encoder를 이용 하여 dict 유형으로 변환 합니다. from datetime import datetime from typing import Union from fastapi import FastAPI fr.. FastAPI - 12 (파일 업로드 / 파일 다운로드) 업로드 된 파일 저장 예시 코드 from fastapi import FastAPI, UploadFile, File, Form from fastapi.responses import HTMLResponse import shutil import os app = FastAPI() os.makedirs("uploads", exist_ok=True) @app.get("/", response_class=HTMLResponse) async def get_upload_form(): return """ Upload File with Extra Fields """ @app.post("/uploadfile/") async def create_upload_file(file: UploadFile = File(...), item_.. FastAPI - 11 (파일 요청 / 폼과 파일 요청) 출처: https://fastapi.tiangolo.com/tutorial/request-files/ 출처: https://fastapi.tiangolo.com/tutorial/request-forms-and-files/ 아래의 내용은 공식 사이트의 내용을 제 경험과 생각을 추가하여 다시 정리한 것 입니다. File, UploadFile fastapi는 파일 요청을 처리 하기 위해 File과 UploadFile을 제공합니다. 클라이언트에서 업로드 한 파일을 받기 위해서는 python-multipart가 필요합니다. pip install python-multipart로 설치 할 수 있습니다. # File과 UploadFile import from fastapi import FastAPI, File, Upl.. FastAPI - 10 (폼 데이터 - Form Data) 출처: https://fastapi.tiangolo.com/tutorial/request-forms/ 아래의 내용은 공식 사이트의 내용을 제 경험과 생각을 추가하여 다시 정리한 것 입니다. 폼 데이터 fastapi는 폼 데이터를 처리 하기 위해 Form을 제공합니다. from fastapi import FastAPI, Form # Form import from typing_extensions import Annotated app = FastAPI() @app.post("/login/") # username: Annotated[str, Form()] -> Form, Annotated를 사용하여 username을 폼 데이터로 지정 # password: Annotated[str, Form()] -> Form,.. 이전 1 2 3 4 다음