web-dev-qa-db-fra.com

Flask vs webapp2 pour Google App Engine

Je démarre une nouvelle application Google App Engine et envisage actuellement deux cadres: Flask et webapp2 . Je suis plutôt satisfait du framework webapp intégré que j'ai utilisé pour ma précédente application App Engine, donc je pense que webapp2 sera encore meilleur et je n'aurai aucun problème avec.

Cependant, il y a beaucoup de bonnes critiques de Flask, j'aime vraiment son approche et toutes les choses que j'ai lues jusqu'à présent dans la documentation et je veux l'essayer. Mais je suis un peu préoccupé par les limites que je peux affronter avec Flask.

Donc, la question est - connaissez-vous des problèmes, des problèmes de performances, des limitations (par exemple, système de routage, mécanisme d'autorisation intégré, etc.) qui Flask pourrait apporter dans l'application Google App Engine? Par "problème", je veux dire quelque chose que je ne peux pas contourner dans plusieurs lignes de code (ou toute quantité raisonnable de code et d'efforts) ou quelque chose qui est complètement impossible.

Et comme question de suivi: y a-t-il des fonctionnalités de tueur dans Flask qui, selon vous, peuvent me faire exploser l'esprit et me faire l'utiliser malgré les problèmes que je peux rencontrer?

115
Anton Moiseev

Avertissement: Je suis l'auteur de tipfy et webapp2.

Un gros avantage de s'en tenir à webapp (ou à son évolution naturelle, webapp2) est que vous n'avez pas à créer vos propres versions pour les gestionnaires de SDK existants pour votre framework de votre choix.

Par exemple, différé utilise un gestionnaire d'application Web. Pour l'utiliser dans une pure Flask vue, en utilisant werkzeug.Request et werkzeug.Response, vous devrez implémenter différé pour cela (comme je l'ai fait ici pour tipfy ).

La même chose se produit pour les autres gestionnaires: blobstore (Werkzeug ne prend toujours pas en charge les demandes de plage, vous devrez donc utiliser WebOb même si vous créez votre propre gestionnaire - voir tipfy.appengine.blobstore ), courrier, XMPP et ainsi de suite, ou d'autres qui seront inclus dans le SDK à l'avenir.

Et la même chose se produit pour les bibliothèques créées avec App Engine à l'esprit, comme ProtoRPC , qui est basé sur webapp et aurait besoin d'un port ou d'un adaptateur pour fonctionner avec d'autres frameworks, si vous ne voulez pas mélanger webapp et les gestionnaires de votre framework de choix dans la même application.

Donc, même si vous choisissez un framework différent, vous finirez a) à utiliser webapp dans certains cas spéciaux ou b) à créer et à maintenir vos versions pour des gestionnaires ou fonctionnalités SDK spécifiques, si vous les utilisez.

Je préfère de loin Werkzeug à WebOb, mais après plus d'un an de portage et de maintenance des versions des gestionnaires SDK qui fonctionnent nativement avec tipfy, j'ai réalisé qu'il s'agissait d'une cause perdue - pour prendre en charge GAE à long terme, le mieux est de rester proche de webapp/WebOb. La prise en charge des bibliothèques SDK est un jeu d'enfant, la maintenance devient beaucoup plus facile, elle est plus évolutive car de nouvelles bibliothèques et fonctionnalités SDK fonctionneront immédiatement et il y a l'avantage d'une grande communauté travaillant autour des mêmes outils App Engine.

Une défense webapp2 spécifique est résumée ici . Ajoutez à ceux qui webapp2 peut être utilisé en dehors d'App Engine et est facile à personnaliser pour ressembler à des micro-frameworks populaires et vous avez un bon ensemble de raisons convaincantes d'aller pour ça. En outre, webapp2 a de grandes chances d'être inclus dans une future version du SDK (c'est extra-officiel, ne me citez pas :-) qui le fera avancer et apportera de nouveaux développeurs et contributions.

Cela dit, je suis un grand fan de Werkzeug et des gars de Pocoo et j'ai beaucoup emprunté à Flask et d'autres (web.py, Tornado), mais - et, vous savez, je '' m biaisé - les avantages de la webapp2 ci-dessus doivent être pris en compte.

138
moraes

Votre question est extrêmement large, mais il ne semble pas y avoir de gros problèmes en utilisant Flask sur Google App Engine.

Ce fil de liste de diffusion contient des liens vers plusieurs modèles:

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

Et voici un didacticiel spécifique à la combinaison Flask/App Engine:

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

Voir également App Engine - Difficulté d'accès aux données Twitter - Flask , Le clignotement du message Flask échoue sur les redirections , et Comment gérer des tiers Python avec Google App Engine? (Virtualenv? Pip?) pour les problèmes rencontrés par les utilisateurs avec Flask et Google App Engine.

13
agf

Pour moi, la décision pour webapp2 a été facile lorsque j'ai découvert que flask n'est pas un framework orienté objet (depuis le début), alors que webapp2 est un framework orienté objet pur. Webapp2 utilise la méthode de répartition basée sur standard pour tous les RequestHandlers (comme flask l'appelle et l'implémente depuis V0.7 dans MethodViews). Alors que dans flask MethodViews sont un module complémentaire, il est un principe de conception de base pour webapp2. Ainsi, la conception de votre logiciel sera différente en utilisant les deux cadres. Les deux cadres utilisent de nos jours des modèles jinja2 et sont assez identiques.

Je préfère ajouter des contrôles de sécurité à un RequestHandler de classe de base et en hériter. C'est également bon pour les fonctions utilitaires, etc. Comme vous pouvez le voir par exemple dans le lien [3], vous pouvez remplacer les méthodes pour empêcher l'envoi d'une demande.

Si vous êtes une personne OO, ou si vous avez besoin de concevoir un serveur REST, je recommanderais webapp2 pour vous. Si vous préférez des fonctions simples avec des décorateurs comme gestionnaires pour plusieurs types de demande, ou si vous n'êtes pas à l'aise avec l'héritage OO, choisissez flask. Je pense que les deux cadres évitent la complexité et les dépendances de cadres beaucoup plus grands comme la pyramide.

  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
3
cat

Je n'ai pas essayé webapp2 et j'ai trouvé que tipfy était un peu difficile à utiliser car il nécessitait des scripts de configuration et des builds qui configurent votre installation python autrement que par défaut. Pour ces raisons et pour d'autres, je n'ai pas " t fait mon plus grand projet dépendre d'un framework et j'utilise la webapp simple à la place, ajoutez la bibliothèque appelée beaker pour obtenir la capacité de session et Django a déjà des traductions intégrées pour les mots communs à de nombreux cas d'utilisation donc lors de la construction une application localisée Django était le bon choix pour mon plus grand projet. Les 2 autres frameworks que j'ai effectivement déployés avec des projets dans un environnement de production étaient GAEframework.com et web2py et généralement il semble que l'ajout d'un framework qui les modifications apportées à son moteur de modèle peuvent entraîner des incompatibilités entre les anciennes et les nouvelles versions.

Donc, mon expérience est que je suis réticent à ajouter un cadre à mes projets à moins qu'ils ne résolvent les cas d'utilisation plus avancés (téléchargement de fichiers, multi-auth, admin ui sont 3 exemples de cas d'utilisation plus avancés qu'aucun cadre pour gae pour le moment gère bien.

2
Niklas Rosencrantz

Je pense que le moteur d'application Google prend officiellement en charge flask framework. Il y a un exemple de code et un tutoriel ici -> https://console.developers.google.com/start/appengine?_ga = 1,36257892,596387946,1427891855

2
Anup