빠른 API
Ormar와 FastAPI를 결합하는 것은 매우 간단합니다.
시작할 때 데이터베이스에 연결하는 것 외에도 Pydantic 모델을 Ormar 모델로 교체하기만 하면 됩니다.
여기에서 매우 간단한 예제 응용 프로그램 코드를 찾을 수 있습니다.
!!! 경고 이 예에서는 이미 데이터베이스를 생성했다고 가정합니다. 그렇지 않은 경우 데이터베이스 초기화 섹션을 방문하십시오.
!!!다음 예제(모든 부품)는 하나의 파일에 배치해야 합니다.
!!!참고 FastAPI 요청 및 응답에서 Ormar 모델을 사용하는 방법에 대해 자세히 알아보려면 응답 및 요청 문서를 확인하십시오.
빠른 시작
!!!github 리포지토리의 예에서 전체 빠른 시작 스크립트를 찾을 수 있습니다.
가져오기 및 초기화
빠른 API 수명 주기를 사용하여 시작 및 종료 프로그램을 정의하고 응용 프로그램에서 사용합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 | 입력 가져오기 목록, 선택 사항
데이터베이스 가져오기
sqlalchemy 가져오기
빠른 API에서 빠른 API 가져오기
오마르 가져오기
컨텍스트 립에서 비동기 컨텍스트 관리자 가져오기
빠른 API에서 빠른 API 가져오기
@async 매니저
Async def 수명(_: FastAPI) -> AsyncIterator [없음]:
구성하지 않은 경우.ase.is_:
구성을 기다립니다.데이터베이스.연결()
수율
구성된 경우.ase.is_:
구성을 기다립니다. 데이터베이스 연결 끊기 ()
base_ormar_config = ormar. OrmarConfig (
메타데이터 = sqlalchemy. 메타데이터(),
데이터베이스 = 데이터베이스. 데이터베이스("sqlite://test.db"),
)
앱 = FastAPI(수명 = 수명(base_ormar_config))
|
!!!정보 api 문서에서 데이터베이스 연결에 대한 자세한 내용을 읽을 수 있습니다.
모델 정의
적절한 필드를 사용하여 ormar 모델을 정의합니다.
이러한 모델은 Pydantic 모델 대신 사용됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | base_ormar_config = OrmarConfig (
메타데이터 = 메타데이터
데이터베이스 = 데이터베이스
)
클래스 카테고리(ormar. 모델):
ormar_config = base_ormar_config (테이블 이름 = "카테고리")
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 100)
클래스 항목(ormar. 모델):
ormar_config = base_ormar_config 사본()
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 100)
카테고리: 옵션 [카테고리] = ormar. 외래 키(카테고리, nullable = True)
|
!!!팁 모델 섹션에서 모델 정의에 대한 자세한 내용을 읽을 수 있습니다.
빠른 API 엔드포인트 정의
ormar 모델이 응답 _ 모델 및 요청 매개 변수로 사용되는 방법에 주목하여 필요한 엔드포인트를 정의합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 | @App.get ("//", _Model = 목록 [항목])
Async def get_ ():
항목 = 대기 항목 선택_관련("카테고리") .all()
반품 아이템
@app.post("//", _Model = 항목)
Async def create_ 항목(항목: 항목):
기다려item.save()
반품 아이템
@app.post("//", _Model=ory)
Async def create_(카테고리: 카테고리):
기다려category.save()
반품 카테고리
@App.put ("//{item_id}")
Async def get_ 항목(item_id: int, 항목: 항목):
item_db = 기다려 Item.ts.get (pk = item_id)
반환 대기 항목_db(** item.model_dump())
@ 앱.삭제("//{item_id}")
Async def delete_항목(item_id: int, 항목: 항목 = 없음):
항목이 있는 경우:
반품 {"deleted_rows": await item.delete()}
item_db = 기다려 Item.ts.get (pk = item_id)
반품 {"deleted_rows": await item_db.delete()}
|
!!!FastAPI가 초기화한 후 저장()과 같은 ormar 모델 방법을 직접 사용할 수 있는 방법에 유의하십시오.
!!!모델(또는 모델 목록)을 직접 반환할 수 있습니다. FastAPI가 당신을 위해 그것을 jsonized 할 것입니다.
응용 프로그램 테스트
빠른 실행API
이 스크립트를 실행하고 Fastapi swagger를 사용하려면 먼저 uvicorn을 설치하십시오.
Pip 설치 uvicorn
그리고 FastAPI를 시작합니다.
uvicorn <filename_without_extension>:app --reload
이제 브라우저로 이동하여(기본적으로 Fasapi 주소가 127.0.0.1:8000/docs) api를 사용할 수 있습니다.
!!!정보 FastAPI 설명서에서 FastAPI 실행에 대한 자세한 내용을 읽을 수 있습니다.
파이테스트로 테스트
다음은 모든 것이 예상대로 작동한다는 것을 증명하는 샘플 테스트입니다.
먼저 테이블을 만드십시오. pyest를 사용하는 경우 고정장치를 사용할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 | @Pytest.ture (자동 = 참, 범위 = "모듈")
Def create_test_ ():
엔진 = sqlalChemy.create_ (DATABASE_URL)
create_all (엔진)
수율
drop_all(엔진)
# 여기 파파피로 오르마의 작동을 확인하기 위한 샘플 테스트가 있습니다.
Starlette.testClient에서 TestClient 가져오기
Def test_all_endpoint():
# TestClient는 동기화만 가능합니다. 여기서 asyns를 사용하지 마십시오.
클라이언트 = TestClient (앱)
# 데이터베이스에 수동으로 연결해야 합니다.
# 또는 테스트 중에 클라이언트를 컨텍스트 관리자로 사용
클라이언트를 클라이언트로 사용:
응답=client.post("/카테고리/", json={"name": "test cat"})
카테고리 = 응답.json ()
응답=client.post(
"/항목/", json ={"name": "test", "id": 1, "category": category}
)
항목 = 항목(** 응답.json())
item.pk 없음이 아니라고 주장
응답 = client.get ("//")
항목 = [응답 항목에 대한 항목(** 항목).json()]
주장된 항목 [0] == 항목
item.name= "새 이름"
응답 = client.put (f " / /{item.pk}", json = item. model_dump ())
응답을 주장하십시오. json () == item.model_dump ()
응답 = client.get ("//")
항목 = [응답 항목에 대한 항목(** 항목).json()]
주장 항목 [0]. 이름 == "새 이름"
응답 = 클라이언트.삭제 (f"//{item.pk}", json = 항목. model_dump ())
응답을 주장하십시오. json ().get ("ed_row", "__UNDEFINED__")! = "__UNDEFINED__"
응답 = client.get ("//")
항목 = 응답.json ()
주장 렌 (항목) ==0
|
!!!팁 더 많은 테스트 사례와 ormar/astapi 테스트 방법을 보려면 github 저장소의 테스트 디렉토리를 참조하십시오.
!!!정보 FastAPI 문서에서 FastAPI 테스트에 대한 자세한 내용을 읽을 수 있습니다.