{"title":"内置基于类的视图 API","version":"4.2","locale":"zh-hans","docname":"ref/class-based-views/index","url":"/zh-hans/4.2/ref/class-based-views/","canonical":"https://djangodocs.dev/zh-hans/4.2/ref/class-based-views/","summary":"基于类的视图 API 参考。关于介绍性材料，请参见 基于类的视图 主题指南。 基础视图 View TemplateView RedirectView 通用显示视图 DetailView ListView 通用编辑视图 FormView CreateView UpdateView DeleteView 通用日期视图…","html":"<h1>内置基于类的视图 API<a class=\"heading-anchor\" href=\"#built-in-class-based-views-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>基于类的视图 API 参考。关于介绍性材料，请参见 <a class=\"reference internal\" href=\"/zh-hans/4.2/topics/class-based-views/\"><span class=\"doc\">基于类的视图</span></a> 主题指南。</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/base/\">基础视图</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/base/#view\"><code class=\"docutils literal notranslate\"><span class=\"pre\">View</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/base/#templateview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">TemplateView</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/base/#redirectview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">RedirectView</span></code></a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-display/\">通用显示视图</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-display/#detailview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">DetailView</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-display/#listview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">ListView</span></code></a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-editing/\">通用编辑视图</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-editing/#formview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">FormView</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-editing/#createview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">CreateView</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-editing/#updateview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">UpdateView</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-editing/#deleteview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">DeleteView</span></code></a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-date-based/\">通用日期视图</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-date-based/#archiveindexview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">ArchiveIndexView</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-date-based/#yeararchiveview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">YearArchiveView</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-date-based/#montharchiveview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">MonthArchiveView</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-date-based/#weekarchiveview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">WeekArchiveView</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-date-based/#dayarchiveview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">DayArchiveView</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-date-based/#todayarchiveview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">TodayArchiveView</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/generic-date-based/#datedetailview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">DateDetailView</span></code></a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins/\">基于类的视图混入</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-simple/\">简单混入</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-simple/#contextmixin\"><code class=\"docutils literal notranslate\"><span class=\"pre\">ContextMixin</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-simple/#templateresponsemixin\"><code class=\"docutils literal notranslate\"><span class=\"pre\">TemplateResponseMixin</span></code></a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-single-object/\">单对象混入</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-single-object/#singleobjectmixin\"><code class=\"docutils literal notranslate\"><span class=\"pre\">SingleObjectMixin</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-single-object/#singleobjecttemplateresponsemixin\"><code class=\"docutils literal notranslate\"><span class=\"pre\">SingleObjectTemplateResponseMixin</span></code></a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-multiple-object/\">多对象混入</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-multiple-object/#multipleobjectmixin\"><code class=\"docutils literal notranslate\"><span class=\"pre\">MultipleObjectMixin</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-multiple-object/#multipleobjecttemplateresponsemixin\"><code class=\"docutils literal notranslate\"><span class=\"pre\">MultipleObjectTemplateResponseMixin</span></code></a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-editing/\">编辑混入</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-editing/#formmixin\"><code class=\"docutils literal notranslate\"><span class=\"pre\">FormMixin</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-editing/#modelformmixin\"><code class=\"docutils literal notranslate\"><span class=\"pre\">ModelFormMixin</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-editing/#processformview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">ProcessFormView</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-editing/#deletionmixin\"><code class=\"docutils literal notranslate\"><span class=\"pre\">DeletionMixin</span></code></a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-date-based/\">基于日期的混入</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-date-based/#yearmixin\"><code class=\"docutils literal notranslate\"><span class=\"pre\">YearMixin</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-date-based/#monthmixin\"><code class=\"docutils literal notranslate\"><span class=\"pre\">MonthMixin</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-date-based/#daymixin\"><code class=\"docutils literal notranslate\"><span class=\"pre\">DayMixin</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-date-based/#weekmixin\"><code class=\"docutils literal notranslate\"><span class=\"pre\">WeekMixin</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-date-based/#datemixin\"><code class=\"docutils literal notranslate\"><span class=\"pre\">DateMixin</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/mixins-date-based/#basedatelistview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">BaseDateListView</span></code></a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/\">基于类的通用视图——扁平化索引</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#simple-generic-views\">简单的通用视图</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#view\"><code class=\"docutils literal notranslate\"><span class=\"pre\">View</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#templateview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">TemplateView</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#redirectview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">RedirectView</span></code></a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#detail-views\">详情视图</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#detailview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">DetailView</span></code></a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#list-views\">列表视图</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#listview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">ListView</span></code></a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#editing-views\">编辑视图</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#formview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">FormView</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#createview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">CreateView</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#updateview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">UpdateView</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#deleteview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">DeleteView</span></code></a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#date-based-views\">基于日期的视图</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#archiveindexview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">ArchiveIndexView</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#yeararchiveview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">YearArchiveView</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#montharchiveview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">MonthArchiveView</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#weekarchiveview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">WeekArchiveView</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#dayarchiveview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">DayArchiveView</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#todayarchiveview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">TodayArchiveView</span></code></a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/class-based-views/flattened-index/#datedetailview\"><code class=\"docutils literal notranslate\"><span class=\"pre\">DateDetailView</span></code></a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n<section id=\"specification\">\n<h2>规范<a class=\"heading-anchor\" href=\"#specification\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>基于类的视图所服务的每个请求都有一个独立的状态，因此，在实例上存储状态变量是安全的（即，<code class=\"docutils literal notranslate\"><span class=\"pre\">self.foo</span> <span class=\"pre\">=</span> <span class=\"pre\">3</span></code> 是一个线程安全的操作）。</p>\n<p>基于类的视图使用 <code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">as_view()</span></code> 类方法部署到一个 URL 模式中。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;view/&quot;</span><span class=\"p\">,</span> <span class=\"n\">MyView</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">(</span><span class=\"n\">size</span><span class=\"o\">=</span><span class=\"mi\">42</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<aside class=\"admonition-thread-safety-with-view-arguments admonition\">\n<p class=\"admonition-title\">线程安全与视图参数</p>\n<p>传递给视图的参数在视图的每个实例之间共享。这意味着你不应该使用列表、字典或任何其他可更改的对象作为视图的参数。如果你这样做了，而共享对象又被修改了，那么访问你视图的一个用户的行为可能会对访问同一视图的后续用户产生影响。</p>\n</aside>\n<p>传入 <code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">as_view()</span></code> 的参数将被分配到用于服务请求的实例上。使用前面的例子，这意味着在 <code class=\"docutils literal notranslate\"><span class=\"pre\">MyView</span></code> 上的每个请求都能够使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">self.size</span></code>。参数必须与类上已经存在的属性相对应（在 <code class=\"docutils literal notranslate\"><span class=\"pre\">hasattr</span></code> 检查时返回 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>）。</p>\n</section>\n<section id=\"base-vs-generic-views\">\n<h2>基础 vs 通用视图<a class=\"heading-anchor\" href=\"#base-vs-generic-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>基于类的基本视图可被视为 <em>父</em> 类视图，可自行使用或继承。它们可能无法提供项目所需的所有功能，在这种情况下，有混入来扩展基本视图的功能。</p>\n<p>Django 的通用视图是在这些基础视图的基础上建立起来的，是作为显示对象详情等常见使用模式的快捷方式而开发的。它们采用了视图开发中的某些常见的习惯和模式，并将其抽象化，这样你就可以快速编写数据的通用视图，而不必重复。</p>\n<p>大多数通用视图需要使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">queryset</span></code> 键，它是一个 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> 实例；关于 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> 对象的更多信息，请参见 <a class=\"reference internal\" href=\"/zh-hans/4.2/topics/db/queries/\"><span class=\"doc\">执行查询</span></a>。</p>\n</section>","rootId":"built-in-class-based-views-api","toc":[{"title":"规范","anchor":"specification","children":[]},{"title":"基础 vs 通用视图","anchor":"base-vs-generic-views","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/4.2/ref/"}],"prev":{"docname":"ref/checks","title":"系统检查框架","url":"/zh-hans/4.2/ref/checks/"},"next":{"docname":"ref/class-based-views/base","title":"基础视图","url":"/zh-hans/4.2/ref/class-based-views/base/"},"formats":{"html":"/zh-hans/4.2/ref/class-based-views/","markdown":"/zh-hans/4.2/ref/class-based-views.md","json":"/zh-hans/4.2/ref/class-based-views.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/ref/class-based-views/index.txt","official":"https://docs.djangoproject.com/zh-hans/4.2/ref/class-based-views/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}