# 12 | 表单的通用模式


Django的表单是强大的,灵活的,易扩展并且稳定的。由于这个原因,Django的admin和CBVs广泛的使用它们。事实上,Django所有主要的API框架使用了ModelForms或者一个相似的实现形式作为验证的一部分。

结合表单,模型和视图让我们在影响很小的情况下完成大量的工作。这种学习的曲线是值得的:一旦你学会了应用这些组件流利的工作,你会发现Django提供了以惊人的速度去创建许多实用的,稳健的功能的能力。

扩展包提示:与表单相关的实用扩展包

django-floppyforms 在HTML5中渲染Django的输出。 django-crispy-forms 高级表单布局控制。默认情况下,表单通过Twitter Bootstrap的表单元素和格式被渲染。这个扩展包和django-floppyforms结合起来很棒,所以它们经常一起被使用。 django-forms-bootstrap 使用Twitter Bootstrap格式来渲染表单的一个简易工具,这个扩展包与django-floppyforms结合的很好,但是与django-crispy-forms冲突。

这一章节明确地进入了Django最好的一部分:表单,模型和CBVs的协同工作。这一章覆盖了5个通用的表单模式,它们应该存在于每一个Django开发者的工具箱里。

12.1 模式1:带有默认验证器的简单模型表单

我们能够写出的最简单的数据变化表单是一个使用几种默认的现有的验证器的模型表单,无需修改。事实上,我们在第十章节已经依赖了默认验证器,Class-Based Views(CBVs)最佳实践。也有10.5.1部分的“视图+模型表单的例子”。

如果你还记得,结合CBVs使用模型表单实现添加/编辑表单,通过下面的几段代码:

  1. EXAMPLE 12.1
  2. # flavors/views.py
  3. from django.views.generic import CreateView, UpdateView
  4. from braces.views import LoginRequiredMixin
  5. from .models import Flavor
  6. class FlavorCreateView(LoginRequiredMixin, CreateView):
  7. model = Flavor
  8. fields = ('title', 'slug', 'scoops_remaining')
  9. class FlavorUpdateView(LoginRequiredMixin, UpdateView):
  10. model = Flavor
  11. fields = ('title', 'slug', 'scoops_remaining')

总结下我们如何使用默认的现有的验证器:

->FlavorCreateView和FlavorUpdateView被指定了Flavor模型。 ->基于Flavor模型两个视图自动生成了模型表单。 ->这些模型表单依赖Flavor模型的默认字段验证规则。

是的,Django对数据验证寄予了我们许多很好的默认设置,但是在实践中,这些默认设置是不够的。我们认识到这点,所以作为第一步,下一个模式将会证明如何创建一个自定义字段验证器。