1. 스키마 작성
유저 가입 기능을 구현하기 이전에 데이터 검증모델을 pydantic을 이용해서 스키마 작성을 한다.
파일들이 여러개로 늘어나는 문제로 폴더명를 조금 변경하고 파일을 이동시켰다.
몇가지 파일을 밑에서 생성할 파일들이다.
hexagonMan(루트폴더)
---db---database.py, db_user_crud.py, models.py
db폴더. 데이터베이스 관련 파일
---migrations---
alembic 관련 폴더
---routers--- schemas.py, user.py
라우터 폴더. API관련 실행이 담겨있는 파일들이다.
- main.py
- haxagonMan.db
- alembic.ini
- requirements.txt
# routers 폴더 - schemas.py
from pydantic import BaseModel
from datetime import datetime
class UserBase(BaseModel):
username: str
password: str
# todo 암호관련 작업 필요하다.
class UserDisplay(BaseModel):
username: str
class Config():
from_attributes = True
class PostBase(BaseModel):
age: str
height: str
education: str
occupation: str
residence_location: str
religion: str
timestamp: datetime
class CommentBase(BaseModel):
text: str
username: str
timestamp: datetime
routers 폴더에 schemas 파일을 생성하고 코드를 작성하였다.
db - models 의 Colunms를 참고하여 작성하였다.
암호 관련 작업은 빠져있다.
orm_mode 가 from_attribute 로 리네임 됐다는 알람을 띄우기 때문에 변경하였다.
스키마는 프론트엔드와 백엔드 사이에서 주고 받을 데이터를 검증하는 거름망이다.
#routers 폴더 - user.py
from sqlalchemy.orm.session import Session
from routers.schemas import UserBase, UserDisplay
from fastapi import APIRouter, Depends
from db.database import get_db
from db import db_user_crud
router = APIRouter(
prefix='/user',
tags=['user']
)
@router.post('', response_model=UserDisplay)
def create_user(request:UserBase, db:Session=Depends(get_db)):
return db_user_crud.create_user(db, request)
프론트엔드에서 요청이 오면 API에서 받아서 데이터베이스에 명령을 하고 그 수행 결과를 다시 반환하는 코드이다. 코드를 살펴보면
router = APIRouter(
prefix='/user',
tags=['user']
)
prefix가 없다면 아래와 같다.
@router.post('/user')
여러개의 기능을 작성할때마다 매번 작성해야 되는 부분을 prefix로 줄일수 있다.
response_model=UserDisplay
사용자가 가입하고 난 다음에 비밀번호와 같이 민감한 정보 다시 반환하지 말고 스키마에 UserDisplay로 정의한 내용한 보낸다. 여기서는 유저네임만 해당한다.
def create_user(request:UserBase, db:Session=Depends(get_db)):
의존성 주입을 통해서 매번 데이터베이스를 열고 실행, 닫는 코드를 반복 작성하지 않고.
db:Session=Depends(get_db)
이 코드로 해결한다.
# db-db_user_crud.py
from routers.schemas import UserBase
from sqlalchemy.orm.session import Session
from db.models import DbUser
def create_user(db:Session, request: UserBase):
new_user = DbUser(
username = request.username,
password = request.password
)
db.add(new_user)
db.commit()
db.refresh(new_user)
return new_user
API로부터 받은 데이터를 데이터 베이스가 직접 추가하고 실행, 새로고침 하는 코드이다.
이제 시범을 해볼 차례이다. code 응답이 200이면 성공이다. response body를 살펴보면 비밀번호는 제외하고 유저네임만 반환되는 것을 확인할수 있다.
'파이썬 > 육각남 찾기 프로젝트(FastAPI+React)' 카테고리의 다른 글
육각남 찾기 프로젝트 10. 첫번째 질문에 답하기 (0) | 2024.03.15 |
---|---|
육각남 찾기 프로젝트 9. 통계 자료 조작과 데이터 베이스에 넣기 (0) | 2024.03.14 |
육각남 찾기 프로젝트 8. 통계자료 찾기 (0) | 2024.03.13 |
육각남 찾기 프로젝트 7. 로그인 암호 암호화하여 저장하기 (0) | 2024.03.13 |
육각남 찾기 프로젝트 5. 데이터베이스 모델링 (0) | 2024.03.11 |
육각남 찾기 프로젝트 4. CORs 문제 해결 (0) | 2024.03.11 |
육각남 찾기 프로젝트 3. 백엔드 코딩 시작, 헬로월드 (0) | 2024.03.11 |
육각남 찾기 프로젝트 2. 기획-공통사항 웹페이지 디자인 (0) | 2024.03.11 |