Jacob Kaplan-Moss 和 Frank Wiles 也为本文做出了贡献。
Django 是围绕可重用应用的概念构建的:提供可重用功能的自包含包。您可以通过组合这些可重用应用以及您自己的特定于站点的代码来构建您的站点。有丰富多样的可重用应用生态系统供您使用——PyPI 列出了超过 8,000 个 Django 应用——但是您如何知道哪些是最好的呢?
为了帮助您专注于应用搜索,我们整理了我们最喜欢的五个应用的列表。它们是
- Cookiecutter:启动新 Django 站点的最佳方式。
- Whitenoise:最佳静态资源服务器。
- Django Rest Framework:使用 Django 编写 REST API 的最佳方式。
- Wagtail:最佳基于 Django 的内容管理系统。
- django-allauth:提供“社交登录”(例如,Twitter、Facebook、GitHub 等)的最佳方式。
我们还建议您查看 Django Packages,这是一个可重用 Django 应用的目录。Django Packages 将 Django 应用组织成“网格”,使您可以比较类似的包并在它们之间进行选择。您可以看到每个包提供的功能以及使用统计信息。(例如:这是 REST 工具的网格,这可能有助于您理解为什么我们推荐 Django REST Framework。)
为什么要信任我们?
我们使用 Django 的时间比几乎任何人都要长。我们中的两个人(Frank 和 Jacob)在 Lawrence Journal-World(Django 的诞生地)工作,在 Django 发布之前(实际上帮助实现了开源发布)。在过去的八年中,我们都花时间经营一家咨询公司,为公司提供关于如何最好地使用 Django 的建议。
因此,我们见证了 Django 项目和社区的整个历史,并且我们看到了流行的包来了又去。在我们三个人之间,我们可能亲自尝试了至少一半的 8,000 个应用,或者我们认识尝试过的人。我们对是什么使应用可靠和稳定有深刻的理解,并且我们对是什么赋予这些东西持久力有很好的理解。
启动新 Django 站点的最佳方式:Cookiecutter
启动一个新项目或应用总是有点麻烦。您可以使用 Django 内置的 `startproject`,但如果您像我们一样,您对做事方式很讲究。Cookiecutter 通过为您提供一种快速简便的方法来定义可以轻松重用的项目或应用模板来解决这个问题。一个简单的例子,只需 `pip install cookiecutter`,然后从命令行运行它
$ cookiecutter https://github.com/marcofucci/cookiecutter-simple-django
您将立即开始收到快速答案的提示,例如您的项目名称、仓库、作者姓名、电子邮件以及一些其他配置位。这些用于帮助填写项目详细信息。我们选择了非常原始的 'foo' 作为我们的仓库名称。因此,cookiecutter 在子目录 'foo' 中创建了一个简单的 Django 项目。
如果您在 'foo' 项目中四处查看一下,您会看到您被提示的其他配置位已根据需要模板化到文件本身以及子目录中。此“模板”全部在 GitHub 仓库 URL 中定义,我们将其用作调用 `cookiecutter` 时的唯一参数。此示例使用远程 GitHub 仓库作为模板;但是,请注意,您也可以使用本地文件系统目录,这非常适合不可重用的场景。
我们提到 cookiecutter 是一个很棒的 Django 包,但老实说,它对于普通的 Python 甚至非 Python 相关的用途也很有用。能够以易于重复的方式完全按照您喜欢的方式布局事物,使 cookiecutter 成为保持工作流程 DRY 的绝佳工具。
最佳静态资源服务器:Whitenoise
多年来,为您的站点的静态资源(图像、JavaScript、CSS)提供服务一直很麻烦。内置的 django.views.static.serve 视图,正如文档所述,“未针对生产用途进行强化,应仅用作开发辅助工具。” 但是从“真正的”Web 服务器(例如 NGINX 或 CDN)提供媒体可能难以设置。
Whitenoise 干净利落地解决了这个问题。它与仅用于开发的静态服务器一样易于设置,并且经过强化和优化以用于生产。设置很简单
- 确保您正在使用 Django 的 contrib.staticfiles 应用,并且您已在设置文件中正确设置 `STATIC_ROOT`。
- 在您的 `wsgi.py` 文件中启用 Whitenoise
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
这真的是全部!对于大型应用程序,您可能需要使用专用媒体服务器和/或 CDN,但对于大多数中小型 Django 站点,Whitenoise 绰绰有余。
有关 Whitenoise 的更多信息,请查看文档。
REST API 的最佳工具:Django REST Framework
REST API 正迅速成为现代 Web 应用程序的标准功能。API 实际上只是用 JSON 而不是 HTML 进行通信,当然您可以使用 Django 来做到这一点。您可以制作自己的视图,这些视图设置正确的内容类型并以 JSON 而不是模板化的 HTML 响应返回数据。这正是许多人在 Django Rest Framework (a.k.a., DRF) 等 API 框架发布之前所做的事情。
使用 DRF 构建 REST API 类似于使用 Django 的基于类的视图,如果您熟悉它们,除了这些是专门针对 API 用例设计和定位的。您的平均 API 设置中涉及相当多的代码,因此为了激发您的兴趣,我们不会提供代码示例,而是重点介绍 DRF 的一些功能,这些功能使您的生活更轻松
- 自动可浏览 API,使开发和手动测试变得轻而易举。在 DRF 演示示例中点击浏览。您可以查看 API 响应并支持 POST/PUT/DELETE 类型操作,而无需自己做任何事情。
- 轻松集成身份验证样式,例如 OAuth、基本身份验证或 API 令牌。
- 简单的权限系统,用于细粒度控制哪些用户可以使用哪些 API 端点和/或操作。
- 内置速率限制。
- 与 django-rest-swagger 结合使用时,几乎自动生成 API 文档。
- 广泛的第三方库生态系统。
虽然您当然可以在没有 DRF 的情况下构建 API,但我们无法想象您为什么要开始走这条路。即使您不使用 DRF 的所有功能,从他们可靠的基础视图类构建自己的 API 视图也是安全、API 一致性和开发速度方面的巨大胜利。如果您尚未使用 DRF,则应抽出一些时间来查看它。
最佳基于 Django 的 CMS:Wagtail
Wagtail 是当前 Django CMS 世界的宠儿,并且有充分的理由。像大多数 CMS 系统一样,它使您可以灵活地通过简单的 Django 模型定义不同类型的页面及其内容。这使您在数小时而不是数天内从零开始获得基本可用的系统。为了给您一个快速示例,为贵公司的人员定义一个 Staff 页面类型可以像
from wagtail.wagtailcore.models import Page
from wagtail.wagtailcore.fields import RichTextField
from wagtail.wagtailadmin.edit_handlers import FieldPanel, MultiFieldPanel
from wagtail.wagtailimages.edit_handlers import ImageChooserPanel
class StaffPage(Page):
name = models.CharField(max_length=100)
hire_date = models.DateField()
bio = models.RichTextField()
email = models.EmailField()
headshot = models.ForeignKey('wagtailimages.Image', null=True, blank=True)
content_panels = Page.content_panels + [
FieldPanel('name'),
FieldPanel('hire_date'),
FieldPanel('email'),
FieldPanel('bio', classname="full"),
ImageChoosePanel('headshot'),
]
然而,Wagtail 的真正吸引力在于其易于使用的现代管理界面和灵活性。您可以控制允许在站点的不同区域中使用哪些类型的页面,为您的页面添加额外的复杂逻辑,并获得开箱即用的标准审核/批准工作流程。使用大多数 CMS 系统,在某些时候您会遇到一堵您无法绕过的墙。使用 Wagtail,我们尚未发现任何我们无法轻松找到门来使其以简单且可维护的方式完全按照我们的意愿执行的墙。如果您有兴趣,我们写了一篇深入探讨 Wagtail 的文章。
最佳社交登录工具:django-allauth
django-allauth 是一个可重用的 Django 应用程序,可解决您的注册和身份验证需求。无论您需要本地还是社交注册系统,django-allauth 都能满足您的需求。
该项目支持多种身份验证方案,例如用户名或电子邮件地址。用户注册后,支持多种帐户验证策略,从无验证到电子邮件验证。还支持多个社交和电子邮件帐户。还支持可插拔的注册表单,允许在注册期间询问其他问题。
django-allauth 支持 20 多个身份验证提供程序,包括 Facebook、GitHub、Google 和 Twitter。如果您的社交网站帐户不受支持,则可以通过第三方插件获得最受支持的支持。该项目支持编写自定义后端,这也允许自定义身份验证系统工作。这对于任何有自定义身份验证需求的人来说都很好。
django-allauth 易于设置,并且有丰富的文档。该项目也经过了充分的测试,因此您知道一切实际上都有效。
您有最喜欢的 Django 包吗?请在评论中告诉我们。
1 条评论