안녕하세요. 이번 시간에는 sqlalchemy에서 like 연산자를 쓰는 방법을 알아보겠습니다. 하나 조심해야 할 것은, 당연하게도 유저의 입력값을 믿으면 안 된다인데요. 이게 무슨 소리일까 싶습니다. like의 경우 %와 _ 등으로 인해 의도치 않은 결과가 나올 수 있습니다. 입력값 필터링을 하지 않거나 escaping을 하지 않은 경우 문제가 발생할 수도 있다는 의미입니다. 먼저 실습에 사용할 데이터입니다. 테이블 A에는 title이 aa, ba, _a, %a인 것이 있습니다. 그리고 models.py에 정의된 모델 A에 대한 클래스입니다. 저는 like 연산자를 썼습니다. Query parameter로 들어오는 keyword에 대해, 접두어가 keyword인 title을 찾습니다. 무엇이 문제일까요..
웹/FASTAPI 검색 결과
fastapi에서 일정 주기로 뭔가를 실행시키는 방법이 없을까요? 예를 들어, 자정 12시마다 방문자 수를 초기화 한다던지, 통계 데이터를 수집해야 하는 경우가 있습니다. 이를 cron으로 돌려서 처리할 수도 있습니다만, 여간 귀찮은 것이 아닙니다. celery에는 worker 뿐만이 아니라, 스케쥴러를 등록해서 사용할 수도 있습니다. 간단하게 알아보겠습니다. 프로젝트 구조는 위와 같습니다. core의 celery 안에 있는 base.py로 들어가 보겠습니다. 코드를 보겠습니다. broker와 backend는 redis를 사용하였습니다. 고로 redis 주소를 적어주었습니다. 다음에, include에는 실행할 테스크가 있는 "app.sche.sche"를 적어주었습니다. 위 코드에서는 메세지를 전송하는 주..
fastapi에서는 application 안에 application을 넣을 수 있습니다. sub application이라고 칭하겠습니다. 이 sub application들을 mount를 하면, 각 어플리케이션 별로 미들웨어 등을 넣을 수 있어요. 분리를 한다? 예를 들어, health check 어플리케이션이랑, api 어플리케이션이랑 분리할 수 있습니다. 이 방법을 간단하게 알아볼 거에요. 먼저 패키지 구조부터 보겠습니다. 별 다른 것은 없고요. sub 패키지 안에 sub_app_1.py와 sub_app_2.py가 있는 구조에요. 먼저 main.py를 보겠습니다. app_1과 app_2를 import 하는데요. 하나는 /sub1에, 다른 하나는 /sub2에 mount 합니다. 여기까지 어렵지 않지요? ..
안녕하세요. 이번 시간에는 field 단위로 동작하는 validator에 대해 알아보겠습니다. 먼저 아래 프로그램을 보겠습니다. x: int = Field(gt=5)라고 되어 있습니다. pydantic의 Field인데요. gt는 greater than의 약자입니다. 즉, 5보다 커야 된다는 조건이 있어야 합니다. 9번째 줄에는 custom validator를 작성하였는데요. "x"는 필드명을 의미합니다. 필드명 x에 대한 커스텀 벨리데이터 함수는 check_x를 의미해요. 1번째 인자는 cls, 2번째 인자는 v인데요. v는 실제로 check_x에 들어온 필드 x의 값을 의미합니다. 보통 이 v값을 검증해서, 조건에 맞지 않으면 ValueError를 떨어트리게 됩니다. pre=True라고 되어 있는데요...
fastapi의 pydantic에는 validator가 있습니다. 이 중에는 전체 schema에 대해 검증을 하는 root_validator가 있습니다. 쉽게 이야기 하면, 필드 값들의 조합이 맞는지 검증하기 위해 주로 쓰입니다. 대표적인 예로 비밀번호 재설정의 경우, 필드 2개가 있을 겁니다. 보통, newPassword, checkNewPassword로 할 텐데요. 이 두 개가 같아야 하는 검증 조건을 추가해야 할 때 쓰여요. 두 개의 필드 값을 비교하고 있잖아요? 예제를 통해 어떻게 쓰는지 간단하게 알아보겠습니다. 먼저 router입니다. ResRequest 스키마를 받아서 처리를 해 주는 post /res가 있습니다. schema.py에 있는 ResRequest입니다. 정수를 받는 x와 y가 있습..
최근댓글