Google App Engine 용 Flask 대 webapp2


116

새로운 Google App Engine 애플리케이션을 시작 중이며 현재 Flaskwebapp2의 두 가지 프레임 워크를 고려하고 있습니다 . 이전 App Engine 애플리케이션에 사용했던 내장 웹앱 프레임 워크에 다소 만족하므로 webapp2가 더 나아질 것이며 문제가 없을 것입니다.

그러나 Flask에 대한 좋은 리뷰가 많이 있습니다. 저는 그 접근 방식과 지금까지 문서에서 읽은 모든 것을 정말 좋아하고 시험 해보고 싶습니다. 하지만 나는 Flask로 길을 잃을 수있는 한계에 대해 약간 걱정하고 있습니다.

따라서 문제는 -Flask가 Google App Engine 애플리케이션에 가져올 수있는 문제, 성능 문제, 제한 사항 (예 : 라우팅 시스템, 내장 권한 부여 메커니즘 등)을 알고 있습니까? "문제"란 여러 줄의 코드 (또는 합리적인 양의 코드와 노력)에서 해결할 수없는 것 또는 완전히 불가능한 것을 의미합니다.

그리고 후속 질문으로, Flask에 내가 직면 할 수있는 문제에도 불구하고 내 마음을 날려 버리고 사용하게 만들 수있는 킬러 기능이 있습니까?


나는 webapp2에 대해 잘 모르지만 몇 달 동안 Flask를 사용해 왔고 그것을 좋아합니다. flask-babel다국어 지원 및 flask-seasurf양식 보안을위한 CSRF 지원 과 같이 정말 도움이되는 플라스크 플러그인을 찾았습니다 .
ThePloki 2016

답변:


138

면책 조항 : 저는 tipfy 및 webapp2의 저자입니다.

webapp (또는 자연스러운 진화, webapp2)를 고수 할 때의 큰 장점은 선택한 프레임 워크에 대해 기존 SDK 핸들러에 대한 자체 버전을 만들 필요가 없다는 것입니다.

예를 들어, deferred 는 webapp 핸들러를 사용합니다. 순수한 Flask 뷰에서 werkzeug.Request 및 werkzeug.Response를 사용하여 사용하려면 deferred를 구현해야합니다 ( 여기 에서 tipfy를 위해했던 것처럼).

다른 핸들러에서도 마찬가지입니다 : blobstore (Werkzeug는 여전히 범위 요청을 지원하지 않으므로 자체 핸들러를 생성하더라도 WebOb를 사용해야합니다 -tipfy.appengine.blobstore 참조 ), 메일, XMPP 등, 또는 향후 SDK에 포함될 기타.

웹앱을 기반으로하며 웹앱 과 프레임 워크를 혼합하지 않으려면 다른 프레임 워크와 작동하기 위해 포트 또는 어댑터가 필요한 ProtoRPC 와 같이 App Engine을 염두에두고 만든 라이브러리에서도 마찬가지 입니다. 같은 앱의 선택 핸들러.

따라서 다른 프레임 워크를 선택하더라도 a) 특별한 경우에 웹앱을 사용하거나 b) 특정 SDK 처리기 또는 기능을 사용할 경우 버전을 만들고 유지 관리해야합니다.

WebOb보다 Werkzeug를 훨씬 더 선호하지만, tipfy와 기본적으로 작동하는 SDK 핸들러 버전을 1 년 넘게 이식하고 유지 관리 한 후 이것이 손실 된 원인이라는 것을 깨달았습니다. 장기적으로 GAE를 지원하는 것이 가장 좋습니다. webapp / WebOb. SDK 라이브러리를 쉽게 지원하고 유지 관리가 훨씬 쉬워지며 새로운 라이브러리 및 SDK 기능이 즉시 작동하고 동일한 App Engine 도구를 중심으로 작업하는 대규모 커뮤니티의 이점이 있기 때문에 미래에 대비할 수 있습니다.

특정 webapp2 방어가 여기 에 요약되어 있습니다 . 그들에 추가 webapp2이 앱 엔진의 외부 사용할 수 있습니다 이며 인기있는 마이크로 프레임 워크처럼 보이도록 사용자 정의 할 쉽게 당신이 그것을 위해가는 특별한 이유의 좋은 세트를 가지고있다. 또한 webapp2는 향후 SDK 릴리스에 포함될 수있는 큰 기회가 있습니다 (이것은 비공식적이며 저를 인용하지 마십시오. :-). 앞으로 나아가고 새로운 개발자와 기여를 가져올 것입니다.

즉, 저는 Werkzeug와 Pocoo 사람들의 열렬한 팬이고 Flask 및 기타 (web.py, Tornado)에서 많은 것을 빌 렸지만-그리고 저는 편견입니다-위의 webapp2 혜택은 고려됩니다.


10
감사합니다, @moraes! 충분히 견고합니다. 저는 blobstore, 메일 (그리고 아마도 ProtoRPC)과 같은 것들이 그 프로젝트에 매우 중요한 부분이라고 생각하며 가능한 한 원활하게 작업하고 싶습니다. 또한 쉽게 피할 수 있다면 다른 프레임 워크를 혼합하는 것이 최선의 생각이 아니라고 생각합니다. 게다가 내가 Flask에 공감한다는 사실에도 불구하고 나는 webapp2에 정말 감명을 받았으며 그것을 시도하고 싶어서 손이 가렵다. 답변과 webapp2에 감사드립니다!
Anton Moiseev 2011

3
@Sundar 모든 WSGI 호환 웹 서버에서 실행할 수 있습니다. Apache의 경우 code.google.com/p/modwsgi 및 기타가 있습니다.
moraes

4
@moraes :이 답변이 현재 구식입니까? GAE SDK가 Flask를 지원한다는 것을 알 수 있습니다. webapp2가 여전히 더 나은 선택입니까?
표면 가공

1
@nish, GAE SDK가 공식적으로 Flask를 지원한다고 언급합니까?
enkash

15
이것이 레거시 허용 답변이지만 webapp2 개발은 죽었습니다. Flask가 갈 길이라고 말하고 싶습니다.
Jesse

13

귀하의 질문은 매우 광범위하지만 Google App Engine에서 Flask를 사용하는 데 큰 문제는없는 것 같습니다.

이 메일 링리스트 스레드는 여러 템플릿에 연결됩니다.

http://flask.pocoo.org/mailinglist/archive/2011/3/27/google-app-engine/#4f95bab1627a24922c60ad1d0a0a8e44

다음은 Flask / App Engine 조합에 대한 가이드입니다.

http://www.franciscosouza.com/2010/08/flying-with-flask-on-google-app-engine/

또한 App Engine-Difficulty Accessing Twitter Data-Flask , Flask message flashing fails across redirects , and how do I manage third-party Python libraries with Google App Engine을 참조하세요. (virtualenv? pip?) 사람들이 Flask 및 Google App Engine에서 겪었던 문제에 대해 설명합니다.


7
감사합니다, @agf. 이 게시물의 대부분을 전에 보았지만 개인적인 경험에 더 관심이 있다고 생각합니다. 문제에 대한 포괄적 인 토론이나 자세한 정보에 관심이 없기 때문에 질문이 너무 광범위하다고 생각하지 않습니다.이 문제를 구현하는 것이 어렵거나 불가능하다는 점을 알려주세요.
Anton Moiseev 2011

2
@Anton, 주관적인 개인적인 경험 을 요청하는 것은 묻지 말아야 할 질문대한 SO 지침에 매우 가깝습니다 .
James

9
@James-동의하지 마십시오. 나는 당신의 추측, 가정 또는 주관적인 감정에 대해 묻지 않습니다. 나는 당신의 경험, 즉 당신이 자신있게 알고 있는 사실 에 대해 묻습니다 . 쓸모없는 게시물도 아니고 다른 사람들이 무거운 커스터마이제이션 과정에서 겪었던 문제가 아니라 사실입니다. 동의하지 마세요-좋아, 그냥 신고하세요.
Anton Moiseev 2011

3

플라스크가 처음부터 객체 지향 프레임 워크가 아닌 반면 webapp2는 순수한 객체 지향 프레임 워크라는 것을 알았을 때 webapp2에 대한 결정은 쉬웠습니다. webapp2는 모든 RequestHandlers에 대한 표준으로 Method Based Dispatching을 사용합니다 (플라스크 문서에서이를 호출하고 MethodViews에서 V0.7 이후로 구현 함). 플라스크에서 MethodViews는 추가 기능이지만 webapp2의 핵심 디자인 원칙입니다. 따라서 두 프레임 워크를 사용하면 소프트웨어 디자인이 다르게 보입니다. 두 프레임 워크 모두 요즘 jinja2 템플릿을 사용하며 기능이 상당히 동일합니다.

기본 클래스 RequestHandler에 보안 검사를 추가하고 상속하는 것을 선호합니다. 이것은 또한 유틸리티 함수 등에 유용합니다. 예를 들어 링크 [3]에서 볼 수 있듯이 요청 발송을 방지하기 위해 메서드를 재정의 할 수 있습니다.

OO 사람이거나 REST 서버를 설계해야하는 경우 webapp2를 권장합니다. 여러 요청 유형에 대한 핸들러로 데코레이터가있는 간단한 함수를 선호하거나 OO 상속이 불편한 경우 플라스크를 선택하십시오. 두 프레임 워크 모두 피라미드와 같은 훨씬 더 큰 프레임 워크의 복잡성과 종속성을 피한다고 생각합니다.

  1. http://flask.pocoo.org/docs/0.10/views/#method-based-dispatching
  2. https://webapp-improved.appspot.com/guide/handlers.html
  3. https://webapp-improved.appspot.com/guide/handlers.html#overriding-dispatch

그게 다야, OOP 지원이 저를 이겼습니다. 나는 원래 web.py를 사용하지만 webapp2는 web.py에서 한 해결 방법없이 깔끔한 구조를 가지고있는 것 같습니다. 플라스크에 쉽게 시작 할 수는 있지만 더 많은 당신이 더 큰 애플 리케이션을하려는 경우보다 필요
아마드 Muzakki

2

Google 앱 엔진이 공식적으로 플라스크 프레임 워크를 지원한다고 생각합니다. 여기에 샘플 코드와 튜토리얼이 있습니다-> https://console.developers.google.com/start/appengine?_ga=1.36257892.596387946.1427891855


저에게 이것은 공식적인 지원이 아닙니다. 이것은 단지 "당신도 Flask로 할 수 있습니다"스타일의 예일뿐입니다. webapp2의 경우 여기저기서 추가 된 GAE 관련 항목에 대한 자세한 설명서가 있습니다.
silpol

2

나는 webapp2를 시도하지 않았고 tipfy는 파이썬 설치를 기본값이 아닌 다른 것으로 구성하는 설정 스크립트와 빌드가 필요했기 때문에 사용하기가 약간 어렵다는 것을 알았습니다. 이러한 이유와 다른 이유로 가장 큰 프로젝트를 프레임 워크에 의존하지 않고 대신 일반 웹앱을 사용하고 세션 기능을 얻기 위해 beaker라는 라이브러리를 추가하고 django는 이미 많은 사용 사례에 공통된 단어에 대한 내장 번역을 가지고 있으므로 현지화 된 애플리케이션 django는 가장 큰 프로젝트에 적합한 선택이었습니다. 실제로 프로젝트와 함께 프로덕션 환경에 배포 한 두 가지 다른 프레임 워크는 GAEframework.com 및 web2py였으며 일반적으로 템플릿 엔진을 변경하는 프레임 워크를 추가하면 이전 버전과 새 버전간에 비 호환성이 발생할 수 있습니다.

그래서 내 경험은 더 고급 사용 사례를 해결하지 않는 한 내 프로젝트에 프레임 워크를 추가하는 것을 꺼려한다는 것입니다 (파일 업로드, 다중 인증, 관리 UI는 현재 gae에 대한 프레임 워크가없는 고급 사용 사례의 3 가지 예입니다. 잘 처리합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.