
Aidons les développeurs à déterminer si le framework Django est adapté à leur prochain projet. C'est probablement - approprié.
Ne saisissez pas un langage de programmation ou un framework particulier simplement parce que vous l'avez utilisé dans votre projet précédent, ou simplement parce que vous le connaissez. Donc, les choses ne se font pas.
Avant de vous lancer dans un nouveau projet, vous devez évaluer le langage ou le framework qui vous convient le mieux pour obtenir le résultat souhaité. Qu'est-ce qui est le plus important pour toi? Sécurité, vitesse de développement, évolutivité, polyvalence, support?
Il vaut mieux prendre une décision éclairée avant de commencer à travailler que de se repentir plus tard (ou pire, accrocher des béquilles au projet en cours de mise en œuvre - car vous ne vous souciez pas de son soutien à l'avance).
J'ai travaillé avec diverses technologies pendant de nombreuses années, traitant à la fois du développement mobile et Web, et je crois que Django propose un ensemble complet de fonctionnalités que l'on ne trouve dans aucun autre cadre Web.
Je comprends que c'est une déclaration forte. Permettez-moi de le justifier.
«Django possède de nombreux sites les plus utilisés, notamment Instagram et Pinterest. Même Facebook utilise Django pour bon nombre de ses utilitaires. Django est né dans un environnement de publication, il n'est donc pas surprenant que ce cadre soit utilisé sur des sites comme The Washington Post et Smithsonian Magazine. » - Amit Ashvini , vice-président du marketing @ Zibtek
Vue générale: quand utiliser Django
Si au moins quelques-uns des points ci-dessous vous concernent (et il n'y a aucun point dans la liste avec lequel vous êtes fortement en désaccord), alors Django est susceptible d'être un bon choix pour votre projet.
- Vous devez développer une application Web ou une API backend.
- Vous devez travailler rapidement, déployer rapidement et apporter des modifications au projet pendant que vous travaillez.
- Par défaut, l'application doit être protégée contre les vulnérabilités et attaques les plus courantes, notamment: CSRF, injection SQL, XSS, clickjacking, etc.
- À tout moment, une mise à l'échelle peut être requise dans l'application: à la fois en augmentant et en diminuant.
- À l'avenir, vous prévoyez d'intégrer les dernières technologies, par exemple, l'apprentissage automatique.
- Vous devez utiliser un cadre fiable en cours de développement actif, utilisé par de nombreuses grandes entreprises et sites Web de premier plan à travers le monde.
- L'application Web et le côté serveur de l'API doivent tous deux être dans la même base de code, cohérente avec la «source unique de vérité» (principe DRY)
- Vous ne voulez pas travailler directement avec les requêtes de base de données et vous avez besoin du support ORM.
- Vous allez utiliser un logiciel gratuit.
- Si vous êtes bloqué, vous devrez chercher une solution vous-même, vous aurez donc besoin d'une bonne documentation et d'une communauté de développeurs réactifs.
En plus des facteurs ci-dessus, vous devez considérer quelles compétences vous (ou votre équipe) avez.
Si vous êtes un développeur Web et savez déjà comment fonctionne le Web, alors travailler avec Django fonctionnera pour vous de manière relativement fluide. Vous devez comprendre comment Django est structuré, et bien sûr d'autres choses aussi - et considérer que vous êtes prêt.
Sites fonctionnant sur le framework Django
L'histoire de Django remonte à environ 10 ans. Au cours de cette période, il a été utilisé en production sur de nombreux sites de premier plan. Voici quelques exemples remarquables:
Ingénierie PinterestMozillaBitbucketUdemyL'oignonDisqusWashington PostNASASpotifyIngénierie InstagramGéographie nationaleLe gardienJsfiddleVous ne savez toujours pas s'il vaut la peine de passer votre temps précieux à vous entraîner avec Django? Pour commencer, voyons pourquoi Django pourrait NE PAS CONVENIR à votre projet:
Quand ne pas utiliser Django
- Vous avez affaire à une application colossale, et elle ne tient tout simplement pas dans une seule base de code. Il pourrait être préférable de diviser votre application en microservices. Chacun de ses niveaux est mieux géré par une équipe dédiée. Pour chaque cas d'utilisation spécifique, d'autres technologies conviennent. Dans certains de ces scénarios, Django peut être utile, mais il ne serait pas pratique de développer pleinement une telle application dans Django (ainsi que dans tout autre cadre distinct).
- Vous devez écrire une application simple dans laquelle vous n'avez pas besoin de travailler avec une base de données, d'effectuer des opérations sur les fichiers ou de faire quoi que ce soit au moins un peu compliqué.
Les microframes sont les mieux adaptées à de telles situations. L'une des microframes les plus populaires - Flask, comme Django, elle est écrite en Python. Des microframes similaires sont disponibles dans d'autres technologies, par exemple. Slim en PHP, Apache Spark en Java, Express.js en Node.js, etc. - Vous voulez tout écrire vous-même à partir de zéro et vous savez ce que vous faites.
- Vous ou vos collègues n'êtes pas familiers avec Django / Python, et vous n'avez pas le temps et les ressources pour développer les compétences nécessaires.
La meilleure solution dans ce dernier cas est de travailler avec ce que vous connaissez le mieux. Si vous adoptez une nouvelle technologie ou un nouveau cadre, les chances de vissage augmentent de nombreuses fois.
Si tout ce qui précède ne concerne pas votre projet, Django est susceptible de vous convenir.
Raisons d'utiliser Django
Le framework Django est écrit en Python:
Je sais que tu le sais.
Par conséquent, je vais saisir cette occasion et souligner certains des principaux avantages de Django qu'il a hérité de Python. Je serai bref.
Python est l'un des langages de programmation les plus populaires et les plus dynamiques au monde.
Sources:
Indice TIOBEAnalyse des données Indeed.com Jobs par Coding DojoGithub octoverseL'apprentissage de Python est vraiment très simple. Habituellement, les développeurs modernes sont les premiers à apprendre ce langage particulier.
Ce qui précède ne signifie pas du tout que cette langue est réservée aux débutants. Python est également utilisé dans les technologies de pointe. Python est activement utilisé dans la pile technologique de nombreuses sociétés géantes, dont Google.
Python est idéal pour développer des outils de grattage Web.
Il interagit bien avec d'autres langues.
Le développement Python ne signifie pas que vous serez obligé de tout écrire en Python uniquement.
Vous pourrez peut-être utiliser des bibliothèques pour de nombreux autres langages, y compris C / C ++ / Java.
Python est portable, facile à lire.
Python peut même fonctionner sur la JVM. Apprenez à
connaître Jython .
Python est largement utilisé dans des technologies populaires telles que le Big Data et le Machine Learning.
Vous avez accès à l'immense bibliothèque PyPI.
Django's All Inclusive
«Tout compris» signifie que Django est prêt à l'emploi équipé de la plupart des bibliothèques et des outils nécessaires dans les situations pratiques courantes. Je vais lister: Django ORM, middleware, authentification, bibliothèques HTTP, support multisite, i18n, Django Admin, moteur de modèle, etc. - et ce n'est pas tout. Aucun autre cadre connu à moi ne fournit à la fois un support aussi large.
Certains considèrent cela comme un «moins», tandis que d'autres le considèrent comme un «plus». Chaque aspect du droit est différent à sa manière et, dans une certaine mesure, je suis d'accord avec les deux.
C'est un inconvénient, car dans une telle situation, le cadre se transforme en un monolithe.
Je crois que si vous avez besoin de ces fonctionnalités qui conduisent à la formation d'un monolithe, d'une manière ou d'une autre, vous devrez utiliser une autre bibliothèque (ou l'écrire vous-même).
Pourquoi alors ne pas utiliser un outil dans lequel tout cela est déjà là, testé en batailles, opérant sur les plus grands sites, développé activement et soutenu par la communauté?
Si vous n'avez pas besoin de la plupart des fonctionnalités offertes par Django, alors il vaut mieux rester sur certains microframes.
Ne réinventez pas la roue - vous vous en souvenez? Passez votre temps sur ce qui est vraiment important et laissez Django faire le reste.
Administrateur Django
Bien que j'aie mentionné cet élément dans la section précédente, il mérite une attention particulière. Dans de nombreux frameworks, en particulier, Laravel, Yii, etc., des tentatives ont été faites pour simplifier le travail avec le panneau d'administration. J'ai réussi à développer de nombreux projets dans différents cadres, mais aucun d'entre eux ne peut être comparé à Django dans la commodité de travailler avec le panneau d'administration.
Certains pensent que Django Admin n'est pas assez flexible, et pour affiner une partie de celui-ci à vos besoins, vous devez faire beaucoup d'efforts. Au début, en travaillant avec Django, j'étais enclin à être d'accord avec cela, mais avec le temps, après avoir trouvé le cadre, j'en suis devenu convaincu. Oui, il y a sa propre courbe d'apprentissage, mais pas une seconde que vous y consacrerez ne sera perdue.
En fait, Django Admin est très bien structuré. Dans certains de mes projets, j'ai utilisé le panneau d'administration de Django «tel quel», et dans d'autres, je l'ai complètement remplacé par mes propres modèles, que j'ai développés à partir de zéro. En tout cas, cela n'a pas pris plus de temps que le développement avec tout autre framework que je connaissais.
Le principal avantage? Vous obtenez des droits d'accès et une authentification hors de la boîte. Il faudrait des semaines (ou au moins quelques jours) pour développer tout cela à partir de zéro.
Principe SEC (ne pas répéter)
Je connais de nombreux cadres dont les partisans affirment qu'ils respectent vraiment le principe «SEC». J'ai travaillé avec de nombreux cadres de ce type, mais dans aucun d'entre eux le principe de «DRY» n'est mis en œuvre comme il se doit.
Malheureusement, dans la plupart des cadres, le principe «SEC» n'est tout simplement pas accordé suffisamment d'attention. À mon avis, si vous écrivez une application que vous avez l'intention de mettre à jour régulièrement (et cela peut être dit pour la plupart des applications modernes), vous devez suivre le principe DRY afin d'éviter les problèmes.
Ainsi, dans Laravel, vous devez écrire la validation pour chaque procédure séparément. La situation est la même avec la plupart des autres cadres. Vous devez travailler dur pour que votre code soit conforme au principe DRY. Il est difficile de garder une trace de cela, surtout si vous travaillez en équipe.
À son tour, le framework Django est conçu de telle manière que la violation du principe DRY ne sort généralement que volontairement.
Cela ne devrait pas l'être, non? Prenons un exemple.
Voici comment Django fonctionne avec la validation et la migration de la base de données
Créez la classe
Model
avec les champs obligatoires. Nous indiquons toutes les validations et restrictions supplémentaires dont nous avons besoin.
Les migrations sont générées par une seule commande CLI: `python manage.py makemigrations`.
Des modifications sont apportées à la base de données avec une seule commande CLI: `python manage.py migrate`.
Les validations et restrictions sont vérifiées automatiquement lors de chaque opération CRUD - qu'il s'agisse d'un administrateur Django ou d'un framework REST Django. Vous n'avez pas besoin de réécrire les validations.
La même classe de modèle est utilisée pour générer des vues Django Admin CRUD. Aucun HTML / CSS personnalisé requis.
Comparez ces conditions avec n'importe quel autre framework - et, je pense, vous ne seriez jamais en mesure de faire quelque chose comme ça dans les quelques lignes de code suivantes:
class Employee(models.Model): name = models.CharField(max_length=127) email = models.EmailField(null=True, blank=True) created_at = models.DateTimeField(blank=True, null=True, auto_now_add=True) updated_at = models.DateTimeField(blank=True, null=True, auto_now=True)
Il ne s'agit pas seulement de «ne pas répéter». Cette approche vous évite les bugs à l'avenir. Nous nous sommes tous retrouvés dans des situations où nous avons changé quelque chose à un endroit et oublié de remplacer à un autre endroit - et cela n'est devenu clair qu'après que de nombreux utilisateurs ont commencé à avoir des problèmes.
Dans Django,
`max_length`
au code ci-dessus, si jamais vous devez remplacer le champ
`max_length`
par quelque chose d'autre - faites-le ici. La modification s'appliquera automatiquement à la validation de tous les itinéraires et à la base de données.
Mappage relationnel objet dans Django
Django fournit un moteur ORM prêt à l'emploi complet.
J'ai travaillé avec de nombreux outils ORM dans diverses technologies, dont Eloquent, greenDAO, Yii AR, etc. Dans chacun d'eux, les demandes les plus simples sont assez bien traitées, mais tôt ou tard j'ai dû écrire telle ou telle demande à partir de zéro, car le mécanisme ORM ne pouvait pas faire face à un cas pratique spécifique.
Avec Django ORM, je n'ai pas encore été dans de telles situations. Cela fonctionnait si bien que vous pourriez oublier que vous travaillez avec des requêtes de base de données. C'est exactement ce que devrait être le mappage relationnel-objet. Voici quelques exemples de Django ORM:
# 5 , rank = 10 age <= 30 top_young_employees = Employee.objects.filter(rank=10, age__lte=30)[:5] # employee = Employee.objects.create(name='John Doe', age=35, country='IN') # print(employee.name)
Développement rapide
Les créateurs de presque n'importe quel framework web adorent s'en vanter, et, peut-être, ils ont tous vraiment raison - selon le sens que nous mettons dans le mot «rapide».
Certes, avec Django, certaines choses se font de façon hilarante. Vous avez déjà vu avec quelle facilité nous avons pu déterminer l'interface utilisateur d'administration, la table de base de données et valider.
Ce n'était que la pointe de l'iceberg.
En principe, le développement rapide n'est pas une fonctionnalité en tant que telle, mais seulement une conséquence organique de Django DRY, ORM, du moteur de modèle et de la philosophie tout compris.
Django Framework Security
Admettons que les développeurs sont parfois paresseux. J'en suis tellement sûr. De temps en temps, je tergiverse, différant la solution des tâches critiques. C'est là que diverses vulnérabilités peuvent apparaître.
J'aime particulièrement le fait que Django ne fasse pas d'indulgences de sécurité pour accélérer le rythme de développement. Les fonctions de sécurité sont activées par défaut, donc peu importe que vous soyez paresseux ou non.
Open source, excellente documentation, énorme communauté, etc.
Puisque Django est un framework open source et incroyablement populaire, une communauté réactive s'est formée autour de lui. Je pense que vous êtes conscient des avantages des logiciels libres - et donc, ils sont tous inhérents à Django.
La documentation officielle de Django est plus que suffisante pour tout développeur. Si vous êtes coincé, trouver une solution n'est pas difficile.
Vous avez peut-être déjà l'impression que Django a créé beaucoup de ses propres bibliothèques, alors vous pourriez être surpris qu'il n'y ait pas de bibliothèque spéciale pour les tests ici. Non, ne pensez pas que le framework Django ne supporte pas les tests - il le supporte, même comme ça. C'est juste que suivant le principe "Ne pas répéter", il serait inutile de développer une bibliothèque pour tester quand une excellente bibliothèque de ce type est déjà en Python lui-même. Django interagit bien avec elle. De plus, il se combine très bien avec des bibliothèques tierces, telles que pytest.
État actuel de Django et d'autres cadres populaires
J'ai donc essayé dans toute la mesure du possible de mettre en évidence les problèmes que j'ai rencontrés en travaillant avec d'autres frameworks et de comparer ces frameworks avec Django. Après avoir travaillé avec Yii, CodeIgniter, WordPress, CS-Cart, Laravel, etc., je suis arrivé à la conclusion que Django est bien meilleur que n'importe lequel d'entre eux.
Cependant, ce n'est que mon avis.
Si vous aimez les statistiques, voici l'étude annuelle Stack Overflow, où Django est parmi les frameworks les plus populaires et recherchés:
Cadres, bibliothèques et outilsCadres, bibliothèques et outils les plus appréciés, les plus redoutés et les plus recherchésEn plus de l'expérience ci-dessus avec PHP, j'ai également développé des applications Android en Java, des applications clientes en React.js. Dans tous ces cas, j'ai passé beaucoup de temps à refactoriser la base de code, à la recherche de la meilleure architecture, après quelques mois à relier les problèmes d'évolutivité et à reprendre le refactoring.
J'ai récemment réécrit de Laravel vers Django une application que j'avais en production depuis plus d'un an. J'ai réussi à déployer une nouvelle base de code en moins de 10 jours, en écrivant le minimum de code pour cela (je dis la même chose: la complexité diminue!) Dans le sens inverse, une telle opération prendrait certainement plus d'un mois.
Si vous essayez de comparer directement d'autres frameworks avec Django, cela ne vous donnera rien.
La surveillance des performances peut montrer que le framework Java est plus rapide que Django. Vous pouvez être bon en PHP, il est donc possible que le développement de votre application dans Django soit plus rapide qu'avec le framework PHP familier. Dans le cas d'une application très simple, la configuration de Django peut vous sembler un peu fastidieuse - bien sûr, il est beaucoup plus facile d'écrire un fichier avec des scripts. Les résultats du sondage peuvent varier selon le public auquel ils ont été menés.
Cependant, nous ne discutons pas seulement ici des cadres liés à d'autres technologies. Même si vous êtes familier avec Python, vous pouvez trouver le microframework Flask plus pratique et souhaitable. Nous devrons penser à laquelle arrêter.
Mon conseil est tout simplement de ne pas les comparer.
Conclusion
À mon avis, Django a réussi à équilibrer parfaitement les performances, l'architecture, la complexité du développement, la sécurité et l'évolutivité.
Si vous commencez à écrire un projet à partir de zéro, je recommande fortement d'essayer de le faire avec Django.