크고 강력한 Python 웹 프레임 워크 5 가지

웹 사이트 나 서비스에 대한 백엔드를 구축 할 때, 언뜻보기에는 겸손 해 보이는 것이라도 그것이 다른 것이 아니라는 것을 금방 알 수 있습니다. "단순한"사이트조차도 복잡한 하이브로 밝혀졌습니다. 사용자 관리, 데이터 디자인, 양식 제출, 보안 등 모든 것을 직접 구현하는 것은 지루한 일입니다.

큰 웹 프로젝트의 경우 모든 것이 필요하고 주방 싱크대가 필요하다는 것을 알고 있다면 배터리 (및 충전기)가 포함 된 프레임 워크를 사용하는 것이 가장 좋습니다. 다음은 강력한 웹 애플리케이션을 빌드하는 데 필요한 모든 것과 함께 제공되는 Python 용 헤비급 웹 프레임 워크 5 가지입니다.

CubicWeb

CubicWeb은 "재사용 및 객체 지향 설계를 선호하는 시맨틱 웹 애플리케이션 프레임 워크"로 청구됩니다. 이 시스템은 2011 년에 Rick Grehan이 검토했을 때 언급했듯이 "큐브"라고하는 코드의 재사용 가능한 빌딩 블록과 추상화의 사용을 강조하는 흥미로운 시스템입니다. 사실, CubicWeb은 일부 개발자에게 너무 추상적이거나 특이 할 수 있으며 개발 속도와 기능 세트는 다른 프레임 워크에 뒤처집니다.

큐브는 스키마 (데이터 모델), 엔터티 (프로그래밍 논리) 및보기를 특징으로하는 소프트웨어 구성 요소입니다. 각각 자체 작업을 수행하는 여러 큐브를 조립하여 자신의 코드와 다른 코드를 재사용하여 소프트웨어 응용 프로그램을 구성 할 수 있습니다.

핵심에서 CubicWeb은 모든 웹 앱에서 사용하는 기본 스캐 폴딩을 제공합니다. 데이터 연결 및 저장을위한 "저장소"; 기본 HTTP 요청 / 응답 및 CRUD 작업을위한 "웹 엔진" 및 데이터 모델링을위한 스키마. 이 모든 것은 Python 클래스 정의에 설명되어 있습니다.

CubicWeb의 인스턴스를 설정하고 관리하려면 Django에 사용되는 것과 유사한 명령 줄 도구를 사용합니다. 기본 제공 템플릿 시스템을 사용하면 HTML 출력을 프로그래밍 방식으로 생성 할 수 있습니다. 부트 스트랩 HTML 프레임 워크와 같은 웹 UI 용 도구를 제공하는 큐브를 사용할 수도 있습니다.

CubicWeb은 Python 3 (버전 3.23 이후)을 지원하지만 Python 3의 기본 비동기 기능을 사용하지 않는 것 같습니다. async를 포함하는 원형 교차로 방법은 cubicweb.pyramid 모듈을 사용하여 Pyramid 프레임 워크를 웹 서버로 사용하고 비동기 구조를 사용하는 Pyramid 포크에 그리는 것입니다. cubicweb-worker 큐브를 사용하여 비동기식으로 작업을 수행 할 수도 있습니다. 그러나 더 간단한 것은 현재로서는 손이 닿지 않는 것 같습니다.

CubicWeb 앱에서 영구 데이터를 가져 오거나 조작하려면 모호한 SQL과 유사한 구문을 사용하지만 W3C의 SparQL에 따라 패턴 화 된 RQL (Relation Query Language)을 사용합니다. 이에 대한 CubicWeb의 정당화는 다시 추상화입니다. RQL은 다양한 데이터 소스를 상호 연관시키기 위해 고도로 분리 된 경로를 제공합니다.

CubicWeb에는 많은 종속성이 있기 때문에 pip install모두 가져 오는 데 사용 하는 것이 가장 좋습니다 . 또한 로컬 환경에서 일정량의 수동 조정을 수행해야 할 수도 있습니다. 이는 pip install프레임 워크의 코드를 다른 프로젝트의 하위 폴더로 실행 하거나 드롭하는 것만으로 필요한 다른 프레임 워크와는 대조적 입니다. 또는 Docker 컨테이너를 사용하여 작업을 실행할 수 있습니다.

CubicWeb은 긴 문서를 "책"이라고합니다. 이 책의 저자는 CubicWeb의 비정상적인 접근 방식을 설명하고, 몇 가지 기본 애플리케이션을 빌드하는 방법을 보여주고, API 참조를 포함하고, 일반적으로 구체적으로 설명하는 데 시간을 할애했습니다.

CubicWeb은 개발 속도가 느리더라도 활성 상태로 유지됩니다. CubicWeb 4.0에 대한 계획은 2012 년부터 검토되었지만 아직 제공 할 일정은 없습니다.

장고

Django가 처음 등장한 이후 10 년 동안 변화하면서 웹 애플리케이션을 만들기 위해 Python에서 가장 널리 배포 된 프레임 워크 중 하나가되었습니다. Django는 필요한 모든 배터리와 함께 제공되므로 작은 것보다 큰 애플리케이션을 빌드하는 데 더 적합합니다.

Django는 버전 1.x에서 수년을 보냈습니다. Django 2.0은 2017 년 말에 출시되었을 때 Python 3.4 이상을 선호하여 Python 2와의 호환성을 떨어 뜨 렸습니다. 2019 년 12 월에 출시 된 Django 3.0은 Python 3.6 이상이 필요하며 Python 웹 애플리케이션을위한 새로운 비동기 ASGI 표준에 대한 지원을 추가합니다.

Django의 매력의 핵심 부분은 배포 속도입니다. Django에는 일반적인 웹 애플리케이션을 개발하는 데 필요한 많은 부분이 포함되어 있기 때문에 빠르게 이동할 수 있습니다. 라우팅, URL 구문 분석, ORM (객체 관계형 매퍼)을 포함한 데이터베이스 연결, 양식 유효성 검사, 공격 보호 및 템플릿이 모두 기본 제공됩니다.

가장 일반적인 웹 애플리케이션 시나리오에 대한 빌딩 블록을 찾을 수 있습니다. 예를 들어 사용자 관리는 대부분의 웹 사이트에서 찾을 수 있으므로 Django는이를 표준 요소로 제공합니다. 사용자 계정, 세션, 암호, 로그인 / 로그 아웃, 관리자 권한 등을 추적하기 위해 자체 시스템을 생성하는 대신 Django는 이러한 기능을 기본적으로 제공합니다. 그대로 사용하거나 최소한의 작업으로 새로운 사용 사례를 포함하도록 확장 할 수 있습니다.

Django에는 웹 애플리케이션을 공격으로부터 보호하는 데 도움이되는 건전하고 안전한 기본값이 있습니다. HTML 또는 JavaScript가 포함 된 문자열과 같은 변수를 페이지 템플릿에 배치하면 변수의 인스턴스를 안전하다고 명시 적으로 지정하지 않는 한 내용이 문자 그대로 렌더링되지 않습니다. 이것은 그 자체로 많은 일반적인 교차 사이트 스크립팅 문제를 제거합니다. 양식 유효성 검사를 수행하려면 간단한 CSRF 보호에서 자세한 오류 피드백을 반환하는 완전한 필드 별 유효성 검사 메커니즘에 이르기까지 모든 것을 사용할 수 있습니다.

Django만큼 풍부하고 광범위한 기능 세트는 강력한 문서 없이는별로 좋지 않을 것입니다. Django 문서는 여러 각도에서 프레임 워크의 모든 측면을 드릴합니다. Python 3 또는 다른 언어 버전 작업, 보안 권한 수행, 공통 웹 응용 프로그램 구성 요소 (예 : 세션 또는 페이지 매김) 구현, 사이트 맵 생성 등이 모두 포함됩니다. 애플리케이션의 각 계층 (모델,보기 및 템플릿)에 대한 API도 자세히 설명되어 있습니다.

그러나 큰 힘에는 큰 복잡성이 따릅니다. Django 애플리케이션은 매우 무겁고 움직이는 부분이 많은 것으로 유명합니다. 간단한 Django 앱도 실행하려면 상당한 양의 구성이 필요합니다. 목표가 몇 가지 간단한 REST 엔드 포인트를 설정하는 것 이상을 수행하는 것이라면 Django는 거의 확실히 과잉입니다.

장고도 단점이 있습니다. 예를 들어 페이지 템플릿은 콜 러블을 사용할 수 없습니다. 예 : {{user.name}}템플릿의 구성 요소로 전달할 수 있지만 {{user.get_name()}}. Django가 템플릿이 실수로 발을 쏘지 않도록 보장하는 방법 중 하나입니다.하지만 준비하지 않은 경우 이러한 제약 조건이 부조화 될 수 있습니다. 해결 방법이 있지만 성능에 영향을주는 경향이 있습니다.

버전 3.0부터 Django는 비동기 뷰에 대한 지원을 추가했습니다. 불행히도 ORM과 같은 Django 스택의 다른 부분에서는 아직 비동기를 지원하지 않습니다. 그러나 ASGI를 사용하여 Django를 배포하여 비동기 뷰를 최대한 활용할 수 있습니다.

Web2py

Ruby 프로그래밍 세계에서 Ruby on Rails는 사실상 웹 프레임 워크입니다. DePaul University 컴퓨터 과학 교수 Massimo Di Pierro는 Rails에서 영감을 받아 Python으로 설정하고 사용하기 쉬운 웹 프레임 워크를 만들었습니다. 결과는 Web2py입니다.

Web2py의 가장 큰 매력은 내장 된 개발 환경입니다. Web2py의 인스턴스를 설정할 때 앱의 구성 요소를 구성 할 수있는 웹 인터페이스 (기본적으로 온라인 Python 애플리케이션 편집기)가 제공됩니다. 이는 일반적으로 Python 모듈 또는 HTML 템플릿을 통해 설명되는 모델, 뷰 및 컨트롤러를 만드는 것을 의미합니다. 몇 가지 예제 앱은 Web2py와 함께 제공됩니다. 이를 분리하여 작동 방식을 확인하거나 시작 템플릿으로 활용하여 자신 만의 앱을 만들 수 있습니다.

개발자는 일반적으로 소스 코드를 다운로드하고 빌드하여 Web2py를 배포합니다. 그러나 Windows 또는 MacOS의 덜 기술적 인 사용자를 위해 Web2py의 제작자는 본질적으로 독립형 서버 인 버전을 제공합니다. 이러한 버전 중 하나를 다운로드하고 압축을 풀고 실행하면 Web2py의 사전 구성된 복사본이 내장 된 로컬 웹 서버가 생깁니다. 이것은 Web2py 앱을 만드는 데 도움이되는 좋은 방법이며 필요에 따라 다른 곳에 배포 할 수 있습니다.

Web2py의 웹 인터페이스는 Bootstrap 4로 구축되었으므로 눈에보기 쉽고 탐색하기 쉽습니다. 브라우저 내 편집기는 완전한 IDE를 대체 할 수는 없지만 줄 번호 및 Python 구문 강조 표시 (자동 들여 쓰기 포함)와 같은 유용한 보조 기능이 제공됩니다. 또한 Python 셸에 대한 빠른 웹 인터페이스가 포함되어 있으므로 명령 줄에서 Web2py와 상호 작용할 수 있습니다. 이는 전문가에게 좋은 점입니다.

Web2py에서 사용되는 데이터 추상화 시스템은 Django의 ORM 및 그것에 의해 영감을받은 다른 ORM (예 : Peewee)과 약간 다르게 작동합니다. 이러한 시스템은 Python 클래스를 사용하여 모델을 정의하는 반면 Web2py는 define_table모델을 인스턴스화하는 것과 같은 생성자 함수를 사용 합니다. 다른 방법에 익숙한 경우에만 차이가 엉망이 될 수 있습니다. 새로 온 사람들을 속여서는 안됩니다. Web2py는 존재하는 거의 모든 주요 데이터베이스와 통신하므로 데이터 공급자에게 Web2py를 연결하는 데 문제가 없을 것입니다.

Web2py에서 정말 유용한 데이터베이스 관련 기능은 모델의 다이어그램을 생성하는 기능으로, 모델이 서로 어떻게 관련되어 있는지 시각화 할 수 있습니다. 하지만 해당 기능을 활성화하려면 PyGraphviz 라이브러리를 설치해야합니다.

Web2py는 jQuery 및 AJAX에 대한 통합 지원을 통해 국제화 기능, 다중 캐싱 방법, 액세스 제어 및 권한 부여, 프런트 엔드 효과 (예 : 양식의 날짜 선택기)와 같은 다른 많은 전문가 급 구성 요소를 제공합니다. 핵심 Web2py 기능을 대체하기 위해 미들웨어를 사용하는 것은 허용되지 않지만 외부 및 내부 미들웨어 용 후크도 포함됩니다. 그러나 오래 실행되는 작업을 처리하는 스케줄러가 있지만 Web2py에서 Python의 비동기 기능을 아직 명시 적으로 사용하지 않았습니다. 

Web2py의 문서가 "책"이라고 불리는 것은 놀라운 일이 아닙니다. 첫째, Web2py, Python 및 두 가지 모두에 사용되는 배포 환경에 대한 엄청난 양의 자료를 다룹니다. 둘째, 접근성이 높고 내러티브 스타일로 작성되었습니다. 셋째, 일반적인 애플리케이션 구축 시나리오에 대해 자세히 설명합니다. 예를 들어 jQuery를 사용하여 AJAX 애플리케이션을 빌드하는 방법에 대한 전체 장이 있습니다.

웨피

Weppy는 Flask의 최소한의 단순성과 Django의 완성도 사이의 중간 표시처럼 느껴집니다. Weppy 앱을 개발하는 동안 Flash의 간단 함이 있지만 Weppy는 데이터 레이어 및 인증과 같은 Django의 많은 기능을 제공합니다. 따라서 Weppy는 매우 단순한 것부터 적당히 정교한 것까지 다양한 앱에 적합합니다.

언뜻보기에 Weppy 코드는 Flask 코드 또는 Bottle 코드와 매우 유사합니다. 기본 단일 경로 웹 사이트를 시작하고 실행하는 데 필요한 지침은 거의 없습니다. 경로는 함수 데코레이터 (쉬운 방법)를 통해 또는 프로그래밍 방식으로 설명 할 수 있으며이를위한 구문은 Flask / Bottle에 가깝습니다. 템플릿은 구문의 사소한 변형을 제외하고 거의 동일하게 작동합니다.

Weppy는 플러그인 또는 추가 기능으로 만 통합되는 일부 기능을 포함함으로써 이러한 작은 프레임 워크와 대조됩니다. 예를 들어 Flask 나 Bottle에는 ORM이나 데이터 관리 시스템이 내장되어 있지 않습니다. Weppy에는 훨씬 더 인기있는 SQLAlchemy가 아닌 pyDAL 프로젝트를 기반으로하지만 ORM이 포함되어 있습니다. Weppy는 심지어 Django가 ORM의 일부로 지원하는 스키마 마이그레이션도 지원합니다 (Django의 마이그레이션 시스템은 훨씬 더 자동화되었습니다). Weppy에는 확장 메커니즘이 있지만 공식적으로 승인 된 애드온 목록은 Flask의 확장 카탈로그보다 훨씬 적습니다.

Weppy와 같은 경량 프레임 워크는 종종 RESTful API를 빌드하는 데 사용되며 Weppy에는 이러한 목적을위한 편의 기능이 제공됩니다. @service경로에 데코레이터를 배치 하면 반환하는 데이터가 JSON 또는 XML 중에서 선택한 형식으로 자동으로 지정됩니다.

Weppy에는 더 큰 프레임 워크와 일치하는 것처럼 보이지만 대량없이 구현되는 다른 기능이 포함되어 있습니다. 예를 들면 데이터 유효성 검사 메커니즘, 양식 처리, 응답 캐싱 및 사용자 유효성 검사가 있습니다. 이 모든 경우에 Weppy는 "충분한"접근 방식을 취합니다. 제공된 기능은 Django 및 기타 헤비급 프레임 워크에서 찾을 수있는 것만 큼 완전하지는 않지만 개발자는 유용하게 만들기 위해 많은 작업을 투자 할 필요가 없으며 사후에 항상 확장 할 수 있습니다.

Weppy에서 발견되는 또 다른 무거운 프레임 워크 기능은 국제화 지원입니다. 템플릿의 문자열은 간단한 Python 사전 인 애플리케이션과 함께 제공되는 로케일 파일에 따라 번역 될 수 있습니다. 언어 선택은 브라우저 요청 (즉, Accept-Language HTTP 헤더)을 구문 분석하거나 번역을 특정 경로에 바인딩하여 설정할 수도 있습니다.

Weppy의 문서는 프레임 워크 자체와 동일한 맛을 가지고 있습니다. 깨끗하고 읽기 쉽고 인간이 소비하도록 작성되었습니다. 일반적인 "hello world"예제 외에도 마이크로 블로깅 시스템을 시작 프로젝트로 만들 수있는 멋진 연습 자습서가 포함되어 있습니다.

Weppy의 장기 계획에는 비동기 및 소켓을 하위 수준의 일류 엔티티로 지원하는 것이 포함됩니다. Weppy의 개발자는 버전 2.0에서 이러한 기능을 도입 한 다음 모든 향후 버전의 Weppy에 Python 3.7 이상을 요구할 계획입니다.

조프