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.

Formulaires avec Django REST Framework + AngularJS

+5 votes

Nous concevons actuellement une webapp en HTML/AngularJS qui se repose sur un socle backend développé en Django et exposant les ressources à travers des API REST.

Nos architectures frontend et backend sont séparées physiquement, et jusqu'à présent ça fonctionne plutôt pas mal et nous permet de connecter différentes interfaces à nos APIs (applications mobiles, modules imbriqués chez des partenaires, etc...)

Par contre, après une grosse partie "consommation des données", nous avons besoin de fournir à l'utilisateur la possibilité de modifier et d'ajouter du contenu. En pur Django, cela passe par les formulaires qui sont véritablement excellents et peuvent s'appuyer sur le modèle.

Malheureusement, étant sur deux architectures bien différenciées, il nous est impossible d'utiliser les Django Forms côté client vu que les templates ne sont pas exposés par Django lui même. Notre intérêt est de mettre à profit la puissance des formulaires dans Django (validation, influence sur l'ORM, etc...) côté serveur et exposer de manière générique les formulaires côté client pour pouvoir les reconstruire.

On est tombé sur des projets sympathiques qui exposaient les formulaire Django via REST, on a regardé également la possibilité de créer un serializer à l'image du formulaire que l'on doit envoyer... Bref, on manque clairement d'expérience sur le sujet, la plupart des solutions trouvées sur Internet ne nous paraissent pas satisfaisantes d'un point de vue modularité et séparation des couches.

demandé 31-Mar-2015 par debnet (990 points)

Quelle est la question ? Djanvo-angular a t il été vu/testé ?

django-angular ne peut pas être utilisé puisque nous séparons le front et la back. Avec ce produit, ça sous-entend que les templates seront distribués par Django.

3 Réponses

0 votes

Dans la même situation que toi. Je suis passé par les services $resource d'Angular:

répondu 1-Avr-2015 par cyril (146 points)

Pour nos APIs RESTful nous utilisons effectivement $ressource pour manipuler nos données. Mais ce n'est pas le sujet de la question ici, nous avons quelques idées pour gérer les choses côté client, c'est côté serveur que ça pèche. :)

0 votes

Il n'y a pas de solution magique, mais restangular peut aider. Après, vous n'aurez rien qui génère les formulaire automatiquement. Mais il est possible de vous faire une API qui vous push juste le HTML des formulaires django à la mano. Vous n'aurez pas une séparation parfaite, mais la praticité est plus importante que la purité.

répondu 2-Avr-2015 par Sam (4,974 points)

Justement, c'est hors de question de générer le HTML côté serveur, Django est vraiment dans le rôle d'un backend multi-support, à terme on supportera de l'application mobile et l'intégration dans d'autres SI non contrôlés.

Nous imaginons actuellement une solution basée sur Django REST Framework où nous imaginons notre formulaire sous forme d'un serializer et nous aurons un autre service qui permettra d'exposer le détail du serializer pour recréer le formulaire associé. Ca fonctionnera pour des formulaires simples et sans trop d'imbrication, mais ça n'ira évidemment pas pour les formulaires ayant un minimum d'intelligence (genre un champ qui se masque en fonction d'un autre).

Ouai mais les formulaires intelligents, il faut le faire à la main, y a pas de solution magique. Avec ou sans django / rest / angular ou autre, ça ne change rien.

0 votes

Avec les serializers + les infos sur les champs présentent dans le HTTP OPTIONS renvoyé par l'API, tu devrais pouvoir générer un formulaire assez simplement côté client.

répondu 7-Avr-2015 par khamaileon (182 points)

Nous y avons pensé justement, cependant il n'y a pas de méthode pour récupérer ces fameux champs OPTIONS, sauf en trichant avec l'API (genre envoyer une requête POST avec _method = OPTIONS, mais c'est plus du REST). Si t'as une astuce, je suis preneur.

Si ton client ne permet pas l'envoi de requêtes HTTP OPTIONS, je te conseille d’utiliser X-Http-Method-Override. C'est une bonne pratique de tout envoyer en POST. Ça évite les problèmes avec certains proxies.

http://www.django-rest-framework.org/topics/browser-enhancements/#http-header-based-method-overriding

...