
让我们帮助开发人员确定Django框架是否适合他们的下一个项目。 这很可能-合适。
不要仅仅因为您在上一个项目中使用过特定的编程语言或框架,或者仅仅是因为您熟悉它就不要抓住它。 所以事情没有完成。
在开始一个新项目之前,您应该评估哪种语言或框架最适合您达到期望的结果。 对您来说最重要的是什么? 安全性,开发速度,可伸缩性,多功能性,支持?
最好是在开始工作之前做出明智的决定,而不是稍后匆忙悔改(或者更糟糕的是,在实施过程中on拐)–因为您实际上并不关心项目的提前支持。
我从事多种技术的研究已有多年,涉及移动和Web开发,我相信Django提供了一套完整的功能,这些功能是其他任何Web框架所没有的。
我了解这是一个大声的声明。 让我证明一下。
“ Django有很多使用最活跃的网站,尤其是Instagram和Pinterest。 甚至Facebook也将Django用于其许多实用程序。 Django诞生于发布环境中,因此在《华盛顿邮报》和《史密森尼杂志》等网站上使用此框架也就不足为奇了。” -Zibtek营销副总裁Amit Ashvini
一般视图:何时使用Django
如果以下至少几点与您有关(并且列表中没有您完全不同意的观点),那么Django很可能适合您的项目。
- 您需要开发一个Web应用程序或后端API。
- 您需要在工作时快速工作,快速部署并对项目进行更改。
- 默认情况下,应保护应用程序免受最常见的漏洞和攻击,尤其是:CSRF,SQL注入,XSS,clickjacking等。
- 在任何时候,应用程序都可能需要缩放:放大和缩小。
- 将来,您计划集成最新技术,例如机器学习。
- 您需要使用一个可靠的框架,该框架正在被全球许多顶级公司和领先网站积极开发。
- Web应用程序和API的服务器端都必须位于同一代码库中,并与“单一真相”(DRY原理)一致
- 您不想直接使用数据库查询,并且需要ORM支持。
- 您将使用免费软件。
- 如果您遇到困难,则必须自己寻找解决方案,因此您将需要良好的文档和反应迅速的开发人员社区。
除上述因素外,您还需要考虑您(或您的团队)具有哪些技能。
如果您是一名Web开发人员,并且已经知道Web的工作方式,那么使用Django将相对平稳地为您工作。 当然,您还需要了解Django的结构以及其他一些内容,并认为您已经做好了准备。
在Django框架上运行的网站
Django的历史可以追溯到大约10年。 在此期间,它被用于许多顶级站点的生产中。 以下是一些出色的示例:
Pinterest工程Mozilla比特桶乌迪米洋葱领英华盛顿邮报美国宇航局SpotifyInstagram工程国家地理守护者杰斯菲德尔您是否仍然值得花宝贵的时间来练习Django? 首先,让我们讨论为什么Django可能不适合您的项目:
什么时候不使用Django
- 您正在处理一个庞大的应用程序,它根本不适合一个代码库。 将您的应用程序拆分为微服务可能更好。 它的每个级别都可以由专门的团队更好地处理。 对于每个特定的用例,其他技术也适用。 在某些情况下,Django可能派上用场,但在Django(以及任何其他单独的框架)中完全开发这样的应用程序是不切实际的。
- 您需要编写一个简单的应用程序,在其中无需使用数据库,执行文件操作或至少要做一些复杂的事情。
微框架最适合此类情况。 最受欢迎的微框架之一-Flask,就像Django,它是用Python编写的。 例如,类似的微框架可用于其他技术。 精简PHP,Java中的Apache Spark,Node.js中的Express.js等。 - 您想从头开始编写所有内容,并且知道自己在做什么。
- 您或您的同事完全不熟悉Django / Python,并且您没有时间和资源来发展必要的技能。
在后一种情况下,最好的解决方案是使用您最了解的知识。 如果您采用新技术或框架,那么搞砸的机会就会增加很多倍。
如果以上都不是您的项目,那么Django很适合您。
使用Django的理由
Django框架是用Python编写的:
我知道你知道
因此,我将借此机会强调他从Python继承的Django的一些关键优势。 我会简短。
Python是世界上最受欢迎和发展最快的编程语言之一。
资料来源:
TIOBE指数的确资料。CodingDojo对Jobs的数据进行了分析Github八极学习Python真的非常简单。 通常,现代开发人员是第一个学习这种特定语言的人。
以上并不意味着该语言仅适用于初学者。 Python还用于尖端技术。 在包括Google在内的许多大公司的技术堆栈中都积极使用Python。
Python非常适合开发Web抓取工具。
它与其他语言很好地交互。
Python开发并不意味着您将被迫仅用Python编写所有内容。
您可能能够使用许多其他语言的库,包括C / C ++ / Java。
Python是可移植的,易于阅读。
Python甚至可以在JVM上运行。
了解Jython 。
Python被广泛用于诸如大数据和机器学习之类的流行技术中。
您可以访问庞大的PyPI库。
Django的全包
“全包”意味着Django已开箱即用,配备了常见实际情况下所需的大多数库和工具。 我将列出:Django ORM,中间件,身份验证,HTTP库,多站点支持,i18n,Django Admin,模板引擎等。 -不仅如此。 我所知没有其他框架可以立即提供如此广泛的支持。
有些人认为这是“减号”,而另一些人则认为这是“加号”。 法律的每一方面在其自身方式上都是不同的,在某种程度上,我同意两者。
这是一个负号,因为在这种情况下框架变成了整体。
我相信,如果您需要这些导致形成整体的功能,那么您将不得不使用其他某种库(或自己编写)。
那么,为什么不使用已经在战斗中进行测试,在最大的站点上运行,积极开发并提供社区支持的工具呢?
如果您不需要Django提供的大多数功能,那么最好保留一些微框架。
不要重新发明轮子-您还记得吗? 将时间花在真正重要的事情上,让Django完成其余工作。
Django管理员
虽然,我在上一节中提到了此元素,但值得我们密切注意。 在许多框架中,尤其是Laravel,Yii等,已经尝试简化管理面板的工作。 我已经设法在不同的框架中开发了许多项目,但是在管理面板的便利方面,没有一个项目可以与Django进行比较。
有人认为Django Admin不够灵活,要根据需要调整其中的任何部分,您需要付出很多努力。 起初,我与Django合作时倾向于同意这一点,但是随着时间的流逝,在弄清楚框架之后,我对此深信不疑。 是的,它有自己的学习曲线,但是您投入它的每一秒钟都不会浪费。
实际上,Django Admin的结构非常好。 在我的一些项目中,我按原样使用了Django管理面板,而在另一些项目中,我则完全用自己开发的模板替换了自己的模板。 无论如何,这只花了我知道的任何其他框架进行开发所花的时间。
主要加? 您可以立即获得访问权限和身份验证。 从头开始开发所有这些可能需要数周(或至少几天)的时间。
干式原理(不重复)
我知道许多框架的支持者声称它们确实符合“ DRY”原则。 我曾经使用过许多这样的框架,但是在其中没有一个“ DRY”原理得到了应有的实现。
不幸的是,在大多数框架中,“干”原理根本没有得到足够的重视。 在我看来,如果您要编写一个打算定期更新的应用程序(对于大多数现代应用程序都可以这样说),那么您应该遵循DRY原则以避免出现问题。
因此,在Laravel中,您必须分别为每个过程编写验证。 大多数其他框架的情况相同。 为了使您的代码符合DRY原则,您需要努力工作。 很难跟踪它,尤其是如果您是团队合作。
反过来,Django框架的设计方式通常是故意违反DRY原则的。
那不应该吧? 考虑一个例子。
Django在数据库验证和迁移中的工作方式如下
使用必填字段创建
Model
类。 我们指出了我们需要的所有其他验证和限制。
迁移是通过一个CLI命令生成的:“ python manage.py makemigrations”。
使用一个CLI命令对数据库进行更改:“ python manage.py migrate”。
在每次CRUD操作期间(无论是Django Admin还是Django REST Framework),都会自动检查验证和限制。 您不必再次编写验证。
相同的模型类用于生成Django Admin CRUD视图。 无需自定义HTML / CSS。
将这些条件与任何其他框架进行比较-并且,我认为,您将无法仅通过以下几行代码就可以做到这一点:
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)
这不仅仅是关于“不重复”。 这种方法可以避免将来出现错误。 我们所有人都发现自己处在一个地方更改某些东西而忘了替换另一个地方的情况-只有在许多用户开始遇到问题之后,这一点才变得清楚。
在Django中,返回上面的代码,如果您不得不用其他方法替换
`max_length`
字段-只需在此处执行即可。 该更改将自动应用于所有路由的验证以及数据库。
Django中的对象关系映射
Django提供了一个功能齐全的即用型ORM引擎。
我使用过各种技术的许多ORM工具,包括Eloquent,greenDAO,Yii AR等。 在所有这些请求中,最简单的请求都得到了很好的处理,但是迟早我不得不从头开始编写这些请求或那些请求,因为ORM机制无法应对特定的实际情况。
使用Django ORM,我还没有遇到过这种情况。 它运行得很好,以至于您可能会忘记正在使用数据库查询。 这正是对象关系映射应具有的功能。 以下是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)
快速发展
几乎任何Web框架的创建者都喜欢为此吹牛,也许他们真的是对的-取决于我们对“ swift”一词的含义。
没错,有了Django,有些事情很快就完成了。 您已经了解了我们能够轻松确定管理UI,数据库表和进行验证的过程。
那只是冰山一角。
原则上,快速开发并不是这样的功能,而仅仅是Django DRY,ORM,模板引擎和包罗万象的哲学的有机产物。
Django框架安全性
让我们承认,有时候开发人员是懒惰的。 我很确定 我不时拖延,推迟解决关键任务的解决方案。 这是可能出现各种漏洞的地方。
我特别喜欢Django不会放任安全性以加快开发速度这一事实。 安全功能默认情况下处于启用状态,因此无论您是否懒惰都不会影响。
开源,出色的文档,庞大的社区等。
由于Django是一个开源且疯狂的框架,因此围绕它建立了一个响应社区。 我想您知道自由软件的优势-因此,它们都是Django固有的。
对于任何开发人员来说,官方的Django文档都绰绰有余。 如果您陷入困境,找到解决方案并不困难。
您可能已经对Django创建了很多自己的库感到印象深刻,因此您可能会惊讶地发现这里没有用于测试的特殊库。 不,不要以为Django框架不支持测试-即使如此,它也支持。 只是遵循“请勿重复”的原则,当Python本身中已经存在此类优秀的库时,开发用于测试的库将毫无意义。 Django与她互动很好。 此外,它与pytest等第三方库很好地结合在一起。
Django和其他流行框架的当前状态
因此,我试图最大程度地强调我在使用其他框架时遇到的问题,并将这些框架与Django进行比较。 在与Yii,CodeIgniter,WordPress,CS-Cart,Laravel等合作之后,我得出的结论是Django比任何一个都要好。
但是,这只是我的看法。
如果您喜欢统计数据,这是年度Stack Overflow研究,其中Django是最受欢迎和最受欢迎的框架之一:
框架,库和工具最喜欢,最害怕和想要的框架,库和工具除了上述使用PHP的经验外,我还用Java开发了Android应用程序,并在React.js中开发了客户端应用程序。 在所有这些情况下,经过几个月的可扩展性问题并再次进行重构之后,我花费了大量时间重构代码库,寻找最佳架构。
我最近从Laravel重写为Django,这是我在生产环境中使用了一年多的应用程序。 我设法在不到10天的时间内部署了一个新的代码库,为此编写了最少的代码(我说的是一样:复杂度降低了!)相反,这样的操作肯定会花费一个多月的时间。
如果您尝试直接将其他框架与Django进行比较,那么您将一无所获。
性能监视可能表明Java框架比Django更快。 您可能会擅长PHP,因此在Django中开发应用程序的速度可能会比使用熟悉的PHP框架更快。 在非常简单的应用程序中,设置Django对您来说似乎有些繁琐-当然,编写脚本文件要容易得多。 调查结果可能会有所不同,具体取决于进行调查的对象。
但是,这里我们不仅在讨论与其他技术有关的框架。 即使您熟悉Python,也可能会发现Flask微框架更加方便和理想。 我们必须考虑停在哪一个。
我的建议是根本不比较它们。
结论
在我看来,Django设法完美地平衡了性能,体系结构,开发复杂性,安全性和可伸缩性。
如果您要从头开始编写项目,我强烈建议您尝试使用Django进行创建。