Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Un back-end full Python pour une appli moderne, oui mais comment ?

+9 votes

Je me suis fait recalé de Stack Overflow pour une question trop vague, j'espère que vous aurez un peu plus pitié de moi ici :)

Concrètement, j'aimerais démarrer un nouveau projet dont l'architecture serait la suivante :

  • Un ou plusiers clients (Desktop et mobile par ex.) AngularJS.
  • Un back-end entièrement en Python contenant :

    • Des data models avec un ORM (ce qui correspondrait à la partie "M" dans le "MVT" de Django)
    • Une API REST (on parle bien ici d'une "programming API" dont le seul but est de permettre à mes clients AngularJS de communiquer avec mon back-end, et non pas une API publique destinée à être utilisée par d'autres dev)
    • Et enfin j'aurais besoin de faire en sorte que mon appli soit mise à jour en temps réel, sans rechargement, en fonction d'événements (donc je pense à WebSocket).

Concrètement en Python, j'ai un petit niveau en Django, mais c'est tout. Je suis prêt à apprendre, pas de soucis, mais là je cale complètement dans le choix des technos !
En effet, Django => pas de websockets. Tornado règle le problème, mais je comprends pas ce que je peux faire avec au niveau des modèles de données et de l'ORM. Enfin, j'entends parler de technos hypes comme Crossbar et Autoban.io.

Bref, je sais qu'il n'y a pas 1 réponse à ma question, mais si vous aviez une "stack" de technos à me conseiller pour mon back-end, et m'expliquer comment chaque élement de la stack s'agence avec l'autre, un grand merci d'avance !

demandé 16-Mai-2015 par walt (230 points)
edité 16-Mai-2015 par max

3 Réponses

+5 votes

Si il n'y a pas besoin de temps réel, pas besoin de websocket. Tu peux aller full django et django-rest-framework. Si tu veux du temps réel, tu peux utiliser crossbar.io et django. L'ORM django marche dans crossbar si tu isoles les appels dans un service, mais par contre il te faudra bricoler un truc à la main pour l'authentification.

A noter aussi qu'on peut utiliser crossbar.io et Django avec plusieurs techniques : http://sametmax.com/un-petit-dashboard-de-monitoring-avec-django-et-wamp/

Mais ça demande du taff.

répondu 16-Mai-2015 par Sam (4,980 points)
edité 24-Jan-2016 par Sam

Yes, merci, j'ai vu cet article d'ailleurs sur le sujet. Ca me fait juste peur pour le futur car Crossbar est encore jeune, la communauté petite, etc. (c'est pour un projet commercial).

Pourquoi utiliser django alors qu'il a juste besoin d'un backend ? Est-ce juste pour l'ORM, ou il y a d'autres raisons ?

(je ne connais rien à Django REST framework)

Parce que Django permet d'utiliser un app, Django-Rest-Framework, qui est fantastique pour créer des API. Ca gère tout : serialization, validation throttling, permissions, authentification, auto-documentation, etc. Si tu veux juste faire 2 vues JSON ça vaut pas le coup. Mais si tu veux faire une API REST propre, c'est un gain de temps énorme.

+4 votes

Pour ce qui est de l'API REST, tu peux aller les yeux fermés vers Django Rest Framework (DRF).

Pour apporter un côté temps réel à DRF, je n'ai pour l'instant rien trouvé de solide.

Gevent socket.io n'est peu/plus maintenu. Django-websocket-redis est buggé jusqu'à l'os et mal conçu malgré un effort sur la doc. Je n'ai pas essayé Swampdragon mais je trouve dommage qu'ils ne réutilisent pas les serializers de DRF mais à voir.

Je te conseille d'utiliser Redis pour le Pub/Sub. Regarde peut être du côté de tornado / redis.

Il te faut une solution serveur éprouvé et il faut bien réfléchir à comment tu vas communiquer avec Django.

Une fois cette étape franchie, il te sera aisé de construire un système de pub/sub pour tes modèles Dango.

répondu 18-Mai-2015 par anonyme

I'm the anonymous ;)

Merci pour ta réponse. Pour l'API j'avais déjà testé Tastypie puis Restless (du même auteur), mais en fait DRF a l'air plus stable dans le temps.
Le fait que tu aies galéré toi aussi à ajouter le temps réel me rassure ^^
J'avais aussi oublié de mentionner Centrifuge qui fonctionne avec Tornado et Redis et a un client JS. Est-ce que quelqu'un a déjà essayé ?

Je ne connaissais pas Centrifuge. ça à l'air très intéressant.

Je vais tacher de faire un test. Si c'est concluant côté serveur, j'ai bien envie de monter un add-on pour DRF. J'ai déjà toute la logique dans un précédent projet basé sur django-websocket-redis.

Ce serait vraiment une killer app pour Django. En allant plus loin, j'aimerais bien trouvé un outils de modélisation côté JS avec un mode offline et la synchro. Le tout mappé automatiquement sur une API DRF. J'ai regardé du côté de Breeze JS. Est-ce que quelqu'un connait ?

Tu as mon entière bénédiction pour cet éventuel add-on pour DRF, ce serait clairement plus qu'intéressant !!!
D'ailleurs si tu as besoin tu peux contacter le mec de Centrifuge par mail, il est sympa et réactif.

Pouvoir mettre en place ultra facilement avec Django, une API REST avec 2 types de endpoints (HTTP classiques + websocket) ce serait le pied !

+2 votes

Tu peux aussi regarder du côté de Pulsar !

http://pythonhosted.org/pulsar/

Tu peux le coupler facilement à Django, ça permet de faire du websocket et tu as aussi le Pulsar Data Store Server (Pulsar-ds is a python implementation of the popular redis data store.).

répondu 18-Jan-2016 par DoubleNain (1,686 points)
...