작은 파이썬 웹 프레임 워크 8 가지

Python의 편리함과 다양성은 거의 모든 IT 생활에서 소프트웨어를 구축하는 데 사용된다는 것을 의미합니다. 한 가지 주요 틈새 시장은 웹 서비스로, Python의 개발 속도와 유연한 은유 덕분에 웹 사이트를 빠르게 시작하고 실행할 수 있습니다.

그리고 짐작할 수 있듯이 Python은 크고 작은 웹 프레임 워크에서 많은 선택권과 관용도를 제공합니다. 결국 모든 웹 프로젝트가 엔터프라이즈 규모 일 필요는 없습니다. 대부분은 일을 완수 할 수있을만큼 충분히 커야하며 더 커서는 안됩니다. 이 기사에서는 단순성, 경량 전달 및 긴밀한 초점을 강조하는 가장 잘 알려진 Python 프레임 워크 8 개를 조사합니다.

병은 다른 "마이크로 프레임 워크"보다 훨씬 더 작고 간결하기 때문에 일종의 미니 플라스크로 간주 될 수 있습니다. 최소 설치 공간으로 인해 Bottle은 다른 프로젝트에 포함하거나 REST API와 같은 소규모 프로젝트를 신속하게 제공하는 데 이상적입니다. (Flask는 아래에서 설명합니다.) 

Bottle의 전체 코드베이스는 단일 파일에 맞으며 외부 종속성이 전혀 없습니다. 그럼에도 불구하고 Bottle은 외부의 도움에 의존하지 않고 일반적인 종류의 웹 앱을 구축 할 수있는 충분한 기능을 갖추고 있습니다.

URL을 함수에 매핑하는 Bottle의 라우팅 시스템은 Flask와 구문이 거의 동일합니다. 당신은 하드 와이어 경로에 국한되지 않는다. 동적으로 만들 수 있습니다. 요청 및 응답 데이터, 쿠키, 쿼리 변수, POST 작업의 양식 데이터, HTTP 헤더 및 파일 업로드는 모두 Bottle의 개체를 통해 액세스하고 조작 할 수 있습니다.

각 기능은 세부 사항에 세심한주의를 기울여 구현되었습니다. 예를 들어 파일 업로드의 경우 이름 지정 규칙이 대상 파일 시스템과 충돌하는 경우 파일 이름을 바꿀 필요가 없습니다 (예 : Windows에서 이름의 슬래시). Bottle은 당신을 위해 그것을 할 수 있습니다.

Bottle에는 자체 간단한 HTML 템플릿 엔진이 포함되어 있습니다. 다시 말하지만, 템플릿 엔진에는 모든 필수 요소가 있습니다. 템플릿에 포함 된 변수는 기본적으로 안전한 HTML로 렌더링됩니다. 문자 그대로 재현해도 안전한 변수를 표시해야합니다. 병의 템플릿 엔진을 Jinja2와 같은 다른 엔진으로 바꾸고 싶다면 Bottle을 사용하면 번거 로움없이 그렇게 할 수 있습니다. 저는 Bottle과 함께 제공되는 간단한 템플릿 시스템을 선호합니다. 빠르고 구문이 소박하며 과도한 어려움없이 코드와 템플릿 텍스트를 혼합 할 수 있습니다.

Bottle은 여러 서버 백엔드도 지원합니다. 빠른 테스트를 위해 자체 내장 미니 서버가 함께 제공되지만 일반 WSGI, 다양한 WSGI 호환 HTTP 서버 및 필요한 경우 일반 이전 CGI도 지원합니다.

Bottle은 다른 프레임 워크만큼 많은 문서가 필요하지 않지만 문서는 결코 간결하지 않습니다. 모든 중요한 요소는 하나의 웹 페이지에 들어갑니다. 그 외에도 각 API에 대한 전체 문서, 다양한 인프라에 배포하기위한 예제, 기본 제공 템플릿 언어에 대한 설명 및 많은 일반적인 레시피를 찾을 수 있습니다.

Flask와 마찬가지로 수동으로 또는 플러그인을 통해 Bottle의 기능을 확장 할 수 있습니다. 병 플러그인은 Flask만큼 많지 않지만 다양한 데이터베이스 레이어와의 통합 및 기본 사용자 인증과 같은 유용한 부분이 있습니다. 비동기 지원을 위해 Bottle은 aiohttp / uvloop와 같이 비동기 적으로 실행되는 기존 서버 어댑터 중 하나를 사용할 수 있지만 async/await기본적으로 지원되지는 않습니다.

Bottle의 미니멀리즘의 한 가지 결과는 일부 항목이 단순히 존재하지 않는다는 것입니다. CSRF (사이트 간 요청 위조) 보호와 같은 기능을 포함한 양식 유효성 검사는 포함되지 않습니다. 높은 수준의 사용자 상호 작용을 지원하는 웹 애플리케이션을 빌드하려면 해당 지원을 직접 추가해야합니다.

Bottle의 또 다른 문제는 개발이 중단되었다는 것입니다. 마지막 포인트 릴리스 인 0.12는 2013 년에 도착했습니다. 즉, Bottle은 계속 유지되고 있으며 개발 릴리스는 프로덕션에 계속 사용할 수 있습니다. 개발자는 기존 Python 버전에 대한 지원을 제공하는 새 버전을 제공 할 계획입니다.

체리 파이

CherryPy는 거의 20 년 동안 어떤 형태로든 존재했지만 처음과 구별되는 미니멀리즘과 우아함을 잃지 않았습니다.

CherryPy의 목표는 웹 페이지를 제공하는 데 필요한 베어 비트 만 포함하는 것 외에 가능한 한 "웹 프레임 워크"가 아니라 다른 종류의 Python 응용 프로그램처럼 느끼는 것입니다. Hulu 및 Netflix와 같은 사이트는 프레임 워크가 구축 할 수있는 매우 눈에 띄지 않는 기반을 제공하기 때문에 프로덕션에서 CherryPy를 사용했습니다. CherryPy는 풀링 된 스레드를 사용하므로 다중 스레드 서버 어댑터를 지원하는 것이 좋습니다.

CherryPy를 사용하면 핵심 로직과 별도로 웹 애플리케이션을 유지할 수 있습니다. 애플리케이션의 함수를 CherryPy에서 제공하는 URL 또는 경로에 매핑하려면 개체의 네임 스페이스가 제공하려는 URL에 직접 매핑되는 클래스를 만듭니다. 예를 들어 웹 사이트의 루트는 "index"라는 함수에 의해 제공됩니다. 이러한 함수에 전달 된 매개 변수는 GET 또는 POST 메서드에서 제공하는 변수를 처리하는 데 사용됩니다.

CherryPy에 포함 된 비트는 저수준 빌딩 블록으로 작동합니다. 세션 식별자와 쿠키 처리는 포함되지만 HTML 템플릿은 포함되지 않습니다. Bottle과 마찬가지로 CherryPy는 정적 파일 제공을 위해 경로를 디스크상의 디렉토리에 매핑하는 방법을 제공합니다.

CherryPy는 기능을 기본적으로 제공하지 않고 지원하기 위해 기존 타사 라이브러리를 사용하는 경우가 많습니다. 예를 들어 WebSocket 애플리케이션은 CherryPy에서 직접 지원하지 않고 ws4py 라이브러리를 통해 지원합니다.

CherryPy에 대한 문서에는 프로그램의 다양한 측면에 대한 편리한 자습서 연습이 포함되어 있습니다. 다른 프레임 워크 자습서와 달리 완전한 종단 간 응용 프로그램을 안내하지는 않지만 여전히 유용합니다. 이 문서에는 가상 호스트의 배포, Apache 및 Nginx를 통한 리버스 프록시 및 기타 여러 시나리오에 대한 유용한 메모가 포함되어 있습니다.

REST 기반 API 만 빌드하고 있다면 Falcon은 당신만을 위해 만들어졌습니다. 표준 라이브러리 이상의 종속성이 거의없는 얇고 빠르며 Falcon은 REST API에 필요한 모든 것을 제공합니다. 2019 년에 출시 된 Falcon 2.0은 Python 2.x 지원을 없애고 최소 Python 3.5가 필요합니다.

Falcon이 "가볍고 날씬한"레이블을 획득 한 이유 중 큰 부분은 프레임 워크의 코드 줄 수와 거의 관련이 없습니다. Falcon은 애플리케이션에 자체 구조를 거의 적용하지 않기 때문입니다. Falcon 애플리케이션은 어떤 함수가 어떤 API 엔드 포인트에 매핑되는지 표시하기 만하면됩니다. 엔드 포인트에서 JSON을 반환하는 것은 경로를 설정하고 json.dumpsPython의 표준 라이브러리에서 함수를 통해 데이터를 반환하는 것 이상을 포함합니다 . 비동기에 대한 지원은 아직 Falcon에 포함되지 않았지만 Falcon 3.0에서이를 실현하기위한 작업이 진행 중입니다.

Falcon은 또한 정상적인 기본 기본값을 사용하므로 설정에 약간의 땜질이 필요하지 않습니다. 예를 들어 명시 적으로 선언되지 않은 모든 경로에 대해 기본적으로 404가 발생합니다. 클라이언트에 오류를 반환하려면 프레임 워크와 함께 번들로 제공되는 여러 스톡 예외 중 하나 (예 HTTPBadRequest:)를 falcon.HTTPError발생 시키거나 일반 예외를 사용할 수 있습니다 . 경로에 대한 전처리 또는 후 처리가 필요한 경우 Falcon은 해당 경로에 대한 후크도 제공합니다.

Falcon이 API에 중점을두고 있다는 것은 기존의 HTML 사용자 인터페이스를 사용하여 웹 앱을 구축 할 수 있다는 것을 의미합니다. 예를 들어 양식 처리 기능 및 CSRF 보호 도구에 대해 많은 것을 기대하지 마십시오. 즉, Falcon은 기능을 확장 할 수있는 우아한 옵션을 제공하므로보다 정교한 아이템을 만들 수 있습니다. 위에서 언급 한 후킹 메커니즘 외에도 Falcon의 모든 API를 래핑하는 데 사용할 수있는 미들웨어를 만들기위한 인터페이스를 찾을 수 있습니다.

Falcon에 대한 문서는 다른 프레임 워크에 비해 간결하지만 다룰 내용이 적기 때문입니다. 사용자 가이드에는 주석을 포함하거나 포함하지 않고 샘플 코드를 볼 수있는 빠른 시작 섹션과 함께 모든 주요 기능에 대한 공식적인 단계별 안내가 포함되어 있습니다.

FastAPI

FastAPI의 이름은 그것이하는 일을 잘 요약 한 것입니다. API 엔드 포인트를 빠르게 생성하도록 제작되었으며 빠르게 실행됩니다.

FastAPI는 고속 네트워킹 코어에 Starlette 프로젝트를 사용하지만 FastAPI를 사용하기 위해 Starlette의 내부에 대해 알 필요는 없습니다. Flask 또는 Bottle 앱과 거의 동일한 방식으로 엔드 포인트를 정의합니다. 데코레이터를 사용하여 어떤 함수가 어떤 경로를 처리하는지 표시 한 다음 자동으로 JSON으로 번역되는 사전을 반환합니다.

반환되는 방법을 쉽게 재정의 할 수 있습니다. 예를 들어, 일부 끝점에서 HTML / XML을 반환하려는 경우 사용자 지정 Response개체 를 반환하기 만하면 됩니다. 커스텀 미들웨어를 추가하고 싶다면 ASGI 표준을 따르는 모든 것을 넣을 수 있습니다. 

FastAPI는 Python의 유형 힌트를 사용하여 경로가 허용하는 데이터 종류에 대한 제약을 제공합니다. 예를 들어, 유형이 라우트 인 경우 Optional[int]FastAPI는 정수를 제외한 모든 제출을 거부합니다. 엔드 포인트에 데이터 유효성 검사 코드를 추가 할 필요가 없습니다. 유형 힌트를 사용하고 FastAPI가 작업을 수행하도록 할 수 있습니다.

당연히 일부는 생략됩니다. 예를 들어 네이티브 HTML 템플릿 엔진은 없지만 그 격차를 채우기위한 타사 솔루션이 부족하지 않습니다. 데이터베이스 연결과 동일하지만 문서에는 특정 ORM (예 : Peewee)이 FastAPI의 비동기 동작과 함께 작동하도록 유도하는 방법에 대한 세부 정보가 포함되어 있습니다.

플라스크

Python 웹 프레임 워크에 대한 많은 논의는 Flask에서 시작되며 그럴만 한 이유가 있습니다. Flask는 사용하기 쉽고 매우 안정적인 잘 확립되고 잘 알려진 프레임 워크입니다. 경량 웹 프로젝트 또는 기본 REST API에 Flask를 사용하여 잘못 사용하는 것은 거의 불가능하지만 더 큰 것을 빌드하려고하면 어려운 작업에 직면하게됩니다.

Flask의 핵심적인 매력은 진입 장벽이 낮다는 것입니다. 기본 "hello world"앱은 10 줄 미만의 Python으로 설정할 수 있습니다. Flask에는 널리 사용되는 HTML 템플릿 시스템 인 Jinja2가 포함되어있어 텍스트를 쉽게 렌더링 할 수 있지만 Jinja2는 여러 다른 템플릿 엔진 (예 : Mustache)으로 교체하거나 직접 롤링 할 수 있습니다.

단순함의 이름으로 Flask는 데이터 레이어 또는 ORM과 같은 장점을 생략하고 양식 유효성 검사와 같은 조항을 제공하지 않습니다. 그러나 Flask는 확장을 통해 확장 할 수 있으며, 그중에는 캐싱, 양식 처리 및 유효성 검사, 데이터베이스 연결과 같은 많은 일반적인 사용 사례를 포함하는 수십 가지가 있습니다. 이 기본 설계를 통해 최소한의 기능으로 Flask 애플리케이션을 엔지니어링 한 다음 필요할 때 필요한 부분 만 계층화 할 수 있습니다.

Flask의 문서는 친절하고 읽기 쉽습니다. 빠른 시작 문서는 간단한 Flask 애플리케이션에 대한 기본 선택의 중요성을 설명하면서 시작하는 데 탁월한 작업을 수행하며 API 문서에는 좋은 예제가 가득합니다. 또한 객체가있는 경우 객체를 반환하는 방법,없는 경우 404 오류와 같은 특정 작업을 수행하는 방법에 대한 빠르고 간단한 예인 Flash 스 니펫 모음도 훌륭합니다.

Flask는 2018 년에 이정표 1.0 릴리스에 도달했으며 Python 2.6 및 Python 3.3은 최소 지원 버전이며 많은 동작이 마침내 결정되었습니다. Flask는 Python의 비동기 구문을 명시 적으로 지원하지 않지만 Quart라는 API 호환 Flask 변형은 이러한 요구를 충족하기 위해 분리되었습니다.

피라미드

작고 가벼운 Pyramid는 기존 Python 코드를 REST API로 노출하거나 개발자가 대부분의 무거운 작업을 수행하는 웹 프로젝트의 핵심을 제공하는 등의 작업에 적합합니다.

"Pyramid를 사용하면 생산성을 빠르게 높일 수 있고 함께 성장할 수 있습니다."라고 문서는 말합니다. "응용 프로그램이 작아도 방해가되지 않으며 응용 프로그램이 커져도 방해가되지 않습니다."

Pyramid의 미니멀리즘을 설명하는 좋은 방법은 Pyramid가 다른 웹 프레임 워크와 비교하여 어떻게 형성되는지를 설명하는 문서 섹션에서 사용되는 용어 인 "정책 없음"입니다. 기본적으로 "정책 없음"은 사용하기로 선택한 데이터베이스 또는 템플릿 언어가 피라미드의 관심사가 아님을 의미합니다.

기본적인 Pyramid 애플리케이션을 구축하는 데 필요한 작업은 거의 없습니다. Bottle 및 Flask와 마찬가지로 Pyramid 애플리케이션은 프레임 워크 자체 용 파일과 별도로 단일 Python 파일로 구성 될 수 있습니다. 간단한 단일 경로 API에는 12 줄 정도의 코드가 필요합니다. 대부분은 from … import문장과 같은 상용구와 WSGI 서버 설정입니다.

기본적으로 Pyramid에는 웹 앱에서 흔히 볼 수있는 몇 가지 항목이 포함되어 있지만 본격적인 솔루션이 아니라 함께 연결되는 구성 요소로 제공됩니다. 예를 들어 사용자 세션에 대한 지원은 CSRF 보호와 함께 제공됩니다. 그러나 로그인 또는 계정 관리와 같은 사용자 계정에 대한 지원은 거래의 일부가 아닙니다. 직접 롤링하거나 플러그인을 통해 추가해야합니다. 양식 처리 및 데이터베이스 연결도 마찬가지입니다.

Pyramid는 이전 Pyramid 프로젝트에서 템플릿을 생성하여 이전 작업을 재사용하는 방법도 제공합니다. "scaffolds"라고하는 이러한 템플릿은 간단한 라우팅과 일부 시작 HTML / CSS 템플릿을 사용하여 Pyramid 앱을 생성합니다. 번들로 제공되는 스캐 폴드에는 샘플 스타터 프로젝트와 인기있는 Python 라이브러리 SQLAlchemy를 통해 데이터베이스에 연결하는 프로젝트가 포함됩니다.