4 FastAPI의 유용한 고급 기능

요청, 이벤트 핸들러, 환경 변수 및 WSGIM 미들웨어

작성자 별 이미지

오늘 주제는 웹 애플리케이션에서 유용 할 수있는 FastAPI의 네 가지 고급 기능에 대한 것입니다. FastAPI를 처음 사용 하는 경우 계속하기 전에 공식 문서에서 제공 하는 시작 안내서 를 따르는 것이 좋습니다 .

또한, 나는 두 FastAPI 자습서 덮여있다 마이그레이션에 플라스크에서 FastAPI에 부드럽게 어떻게 하고 메타 데이터 및 FastAPI의 추가 응답 . FastAPI와 관련된 팁과 요령에 대해 자세히 알아 보려면 자유롭게 확인하십시오. 이 튜토리얼에서는 다음과 같은 기본 개념을 설명하겠습니다.

  • Request Request개체를 직접 사용하여 클라이언트 주소, 요청 본문, 쿠키 등을 가져옵니다.
  • Event handlers — 응용 프로그램이 시작되거나 종료 될 때 실행할 기능을 등록합니다.
  • Environment variables — 프로젝트와 관련된 구성 및 설정을 처리합니다.
  • WSGIMiddleware — FastAPI 내에 하위 애플리케이션으로 Flask 또는 Django 서버를 포함합니다.

RequestFastAPI 의 개체는 그 Request위에 추가 도구 가있는 Starlette를 기반 으로합니다. 실제로 경로 작업 함수 내에서 직접 사용하여 클라이언트의 IP 주소와 같은 세부 정보를 얻을 수 있습니다. 다음 코드 조각을 살펴보십시오. API는 호출시 클라이언트의 호스트와 포트를 반환합니다.

공식 문서에 따르면 Request객체에는 일반적으로 사용되는 다음 필드가 있습니다.

  • Method—를 통해 액세스 할 수 request.method있습니다.
  • URL—를 통해 액세스 할 수 request.url있습니다. 같은 다른 구성 요소를 포함 request.url.path, request.url.port, request.url.scheme.
  • Headers—를 통해 액세스 할 수 request.headers있습니다. 구성 요소는 변경 불가능하고 대소 문자를 구분하지 않는 다중 사전으로 노출됩니다. 예를 들어 헤더에서 request.headers[‘content-type’]가져 Content-Type오는 데 사용할 수 있습니다 .
  • Query Parameters—를 통해 액세스 할 수 request.query_params있습니다. 와 마찬가지로 Headers다음을 사용하여 검색어 매개 변수에 액세스 할 수 있습니다. request.query_params['search']
  • Path Parameters—를 통해 액세스 할 수 request.path_params있습니다. 매개 변수는 다중 사전으로 노출됩니다. 예를 들면request.path_params['name']
  • Client Address—를 통해 액세스 할 수 request.client있습니다. 호스트 및 포트에 대해 명명 된 2 튜플을 보유합니다. request.client.host및을 통해 세부 정보를 얻을 수 있습니다 request.client.port.
  • Cookies— 쿠키는 사전 인터페이스를 기반으로합니다. 을 사용하여 내부 필드에 액세스 할 수 있습니다 request.cookies.get('mycookie').
  • Body — 반환 본문은 사용 사례에 따라 여러 인터페이스로 구성됩니다. 바이트 데이터를 얻으려면 request.body(). 양식 데이터 또는 멀티 파트는 request.form(). 또한 request.json().

FastAPI에서는 애플리케이션 시작 또는 애플리케이션 종료시 등록 된 기능을 실행할 이벤트 핸들러를 정의 할 수 있습니다. 그러나 FastAPI는 주 응용 프로그램에 대한 이벤트 처리기 만 실행합니다. 다른 하위 응용 프로그램을 마운트 한 경우 하위 응용 프로그램 내부의 이벤트 처리기가 실행되지 않습니다.

시작

기능 on_event()위에있는 데코레이터를 통해 이벤트에 기능을 쉽게 등록하거나 추가 할 수 있습니다 . startupFastAPI 서버가 시작되기 전에 실행되어야하는 함수를 위해 데코레이터를 선언하십시오 . 다음 예를 살펴 보겠습니다.

@app.on_event("startup")
async def startup_event():
    print('Start')

일시 휴업

반면에 애플리케이션 종료 전에 함수를 실행하는 대신 데코레이터 shutdown의 입력 매개 변수로 사용해야합니다 on_event(). 다음 예제는 Shutdown애플리케이션 종료 직전에 콘솔에 인쇄되는 간단한 종료 기능을 보여줍니다 .

@app.on_event("shutdown")
async def shutdown_event():
    print('Shutdown')
작성자 별 이미지

이 글을 쓰는 시점에서 reload플래그를 사용하는 경우 대부분의 경우 종료 이벤트가 발생하지 않는 문제가 있는 것 같습니다 .

또한 함수가 파일 읽기 또는 쓰기와 같은 I / O 바인딩 된 기능 사용과 관련이있는 경우 def대신 표준 함수를 사용해야합니다 async def.

@app.on_event("shutdown")
def shutdown_event():
    with open("log.txt", mode="a") as log:
        log.write("Application shutdown")

FastAPI 서버에서 구성 설정을 처리하는 방법에는 여러 가지가 있습니다. 그중 하나는 BaseSettingsPydantic에서 제공 하는 유틸리티 모듈 에 의존하는 것입니다 .

구성 파일

config.pyFastAPI 서버의 동일한 디렉토리에 라는 새 Python 파일을 만듭니다 . 그런 다음 파일 안에 다음 코드를 추가합니다.

FastAPI 서버

FastAPI 서버 파일의 import 문을 다음과 같이 수정합니다. 종속성 메서드를 사용하여 설정을로드 할 것입니다. 이는 주로 나중에 테스트 목적으로 매우 유용한 사용자 지정 설정으로 종속성을 쉽게 재정의 할 수 있기 때문입니다.

또한 lru_cache응용 프로그램이 각 요청 중에 동일한 설정 개체를 반복해서 재사용 할 수있는 편리한 방법을 제공하는 기능 도 가져 왔습니다 . Settings처음 호출 될 때 한 번만 개체 를 만듭니다 .

from fastapi import FastAPI, Depends
from functools import lru_cache
import config

설정에 대한 전역 getter 함수를 담당하는 첫 번째 함수입니다. 두 번째 기능은 경로 작업 내에서 설정을 얻는 방법을 보여줍니다. config.Settings()함수에 각 인수를 전달하여 설정을 쉽게 수정할 수 있습니다 . 예를 들어 다음과 같이 기본 이메일 설정을 변경할 수 있습니다.

@lru_cache()
def get_settings():
    return config.Settings(email = "new@example.com")

이 섹션에서는 FastAPI 내에 Flask 서버를 하위 응용 프로그램으로 포함하는 방법에 대해 알아 봅니다. 이를 통해 추가 수정없이 이전 Flask 서버의 기능을 유지하면서 FastAPI에서 개발을 계속할 수 있습니다.

가져 오기만하면됩니다. WSGIMiddleware

from fastapi.middleware.wsgi import WSGIMiddleware

app.mount("/flask", WSGIMiddleware(flask_app))

@flask_app.route("/")
def flask_main():
    return "Hello from Flask!"

FastAPI를 다시 실행하고 브라우저에서 다음 URL로 이동하십시오.

http://localhost:8000/flask

Hello from Flask!

@flask_app.route("/main")
def flask_main():
    return "Hello from Flask!"

http://localhost:8000/flask/main

오늘 배운 내용을 요약 해 보겠습니다.

우리는 Request대상 에 대해 자세히 배우기 시작했습니다 . Starlette의 Request객체를 기반 으로하기 때문에 클라이언트의 호스트 및 포트 번호와 같은 중요한 정보를 알리기 위해 직접 액세스 할 수 있습니다.

다음으로 시작 및 종료 이벤트 핸들러에 함수를 등록하는 작업을 수행했습니다. 이를 사용하여 애플리케이션 시작 및 종료시 기능을 실행할 수 있습니다.

계속해서 FastAPI에서 구성 및 설정을 처리하는 몇 가지 방법에 대해 배웠습니다. 그중 하나는 BaseSettings유틸리티 모듈 에 의존하고 종속성 메서드를 통해 설정을로드하는 것입니다.

마지막으로 WSGIMiddleware모듈을 사용하여 FastAPI 서버 내부에 Flask 애플리케이션을 탑재하는 것을 테스트했습니다 .

이 글을 읽어 주셔서 감사합니다. 다음 기사에서 다시 뵙기를 바랍니다!

참고 문헌

  1. 직접 요청을 사용하는 FastAPI
  2. Starlette 요청
  3. FastAPI 이벤트
  4. FastAPI WSGIM 미들웨어

Suggested posts

좋은 습관을 만들고 유지하는 방법

장기적인 습관을 유지하기위한 생산성 팁

좋은 습관을 만들고 유지하는 방법

두 아이의 엄마가 된 후 일을 끝내기가 더 어려워졌습니다. 나는 한 작업에서 다음 작업으로 뛰어 들었고 하루가 끝날 때까지 아무것도하지 않았을 때 실망했습니다.

양자 컴퓨팅 Pt를위한 프로그래밍. 1 : NumPy

이제 양자 컴퓨팅이면의 물리학을 배우기 시작 했으므로 "이봐, 실제로 양자 컴퓨터를 사용하려면 실제로 양자 장치를 손으로 만들어야합니까?"라고 궁금해 할 것입니다. 답은 양자 컴퓨터를 컴퓨터라고 부르는 이유가 있습니다. 프로그래밍이 가능합니다! 이 시리즈에서는 수학 개념을 시뮬레이션하고 양자 컴퓨터에서 실행하는 소프트웨어를 구축하는 방법을 배우게됩니다. 깨끗하고 현대적이며 라이브러리가 풍부한 언어이기 때문에 Python을 사용하여 코드를 작성할 것입니다.

Related posts

"실용적인 프로그래머"의 5 가지 필수 사항

역대 베스트셀러 코딩 북의 요점

"실용적인 프로그래머"의 5 가지 필수 사항

Pragmatic Programmer는 1999 년에 처음 출판되었으며 이후 역대 최고의 프로그래밍 책으로 선정되었습니다. 저자 Andy Hunt와 David Thomas는 Agile Manifesto의 원저자 중 하나였으며 몇 가지 심각한 자격을 가지고 있습니다.

대규모 GraphQL 쿼리 공격으로부터 보호

공격자가 공개적으로 사용 가능한 GraphQL 인터페이스를 사용하여 사이트를 스크랩하거나 서비스 거부 공격을 실행하는 방법에 대해 알아보십시오. 이들은 4 가지 방법 중 하나로이를 수행 할 수 있습니다. 단일 대형 쿼리를 신중하게 구성하여 실행하고, 관련 데이터를 가져올 수있는 병렬 쿼리를 많이 작성하고, 일괄 요청을 사용하여 많은 쿼리를 연속적으로 실행하고, 마지막으로 많은 요청을 보냅니다.

기술 인터뷰의 사회적 구성 요소

코딩 문제는 스트레스가 많지만 스트레스에 대한 당신의 반응은 당신의 기술적 능력보다 더 크게 말합니다.

기술 인터뷰의 사회적 구성 요소

기술 업계의 직책을 위해 인터뷰 할 때 일반적으로 제안을 고려하기 전에 최소한 3 차례의 인터뷰를 거치게됩니다. 라운드는 일반적으로 다음과 같습니다. 그렇게 생각하면 잘못된 것입니다.

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자를 만드는 비 기술적 인 것들 나는이 기사를 작성하는 것을 한동안 미루고 있습니다. 나는 그것을 작성할 자격이 있다고 생각하지 못했습니다. 오늘은 쓸 때라고 생각했습니다.