基础视图

    Django 内置的许多基于类的视图都是从其他基于类的视图或各种混入中继承过来的。因为这个继承链非常重要,所以祖先类被记录在 祖先(MRO) 节标题下。MRO 是方法解析顺序的缩写。

    class django.views.generic.base.``View

    基于主类的基本视图。所有其他基于类的视图都继承自这个基类。它并不是严格意义上的通用视图,因此也可以从 django.views 导入。

    方法流程图

    1. dispatch()
    2. options()

    示例 views.py

    示例 urls.py

    1. from django.urls import path
    2. from myapp.views import MyView
    3. urlpatterns = [
    4. path('mine/', MyView.as_view(), name='my-view'),
    5. ]

    属性

    • http_method_names

      此视图将接受的 HTT P方法名称列表。

      默认:

    方法

    • classmethod as_view(\*initkwargs*)

      返回一个接受请求并返回响应的可调用对象视图:

      1. response = MyView.as_view()(request)

      返回的视图有 view_classview_initkwargs 属性。

      当视图在请求/响应周期中被调用时, 方法将 HttpRequest 分配给视图的 request 属性,将任何位置和/或关键字参数 中捕获的参数分别分配给 argskwargs 属性。然后调用 dispatch()

    • setup(request, \args, **kwargs*)

      在 之前执行关键视图初始化。

      如果覆盖这个方法,必须调用 super()

    • http_method_not_allowed(request, \args, **kwargs*)

      如果调用视图时使用了它不支持的 HTTP 方法,就会调用这个方法。

      默认的实现返回 HttpResponseNotAllowed,其中包含一个纯文本的允许方法列表。

    • options(request, \args, **kwargs*)

      处理响应 OPTIONS HTTP 动词的请求。返回一个包含 Allow 头的响应,该头包含一个视图允许的 HTTP 方法名称列表。

    class django.views.generic.base.``TemplateView

    渲染一个给定的模板,其上下文包含 URL 中捕获的参数。

    祖先(MRO)

    该视图从以下视图继承方法和属性。

    方法流程图

    1. dispatch()
    2. get_context_data()

    示例 views.py

    示例 urls.py

    1. from django.urls import path
    2. from myapp.views import HomePageView
    3. urlpatterns = [
    4. path('', HomePageView.as_view(), name='home'),
    5. ]

    上下文

    • 填充(通过 )从服务于视图的 URL 模式中捕获的关键字参数。
    • 你也可以使用 extra_context 关键字参数为 添加上下文。

    class django.views.generic.base.``RedirectView

    重定向到给定的 URL。

    给定的 URL 可能包含字典式的字符串格式,将对 URL 中捕获的参数进行插值。因为关键字插值 总是 进行的(即使没有参数传递进来),URL 中的任何 "%" 字符必须写成 "%%",这样 Python 就会在输出中把它们转换为一个百分号。

    如果给定的 UR L是 None,Django 将返回一个 HttpResponseGone (410)。

    这个视图从以下的视图中继承了方法和属性:

    方法流程图

    1. setup()
    2. http_method_not_allowed()

    示例 views.py

    示例 urls.py

    1. from django.urls import path
    2. from django.views.generic.base import RedirectView
    3. from article.views import ArticleCounterRedirectView, ArticleDetailView
    4. urlpatterns = [
    5. path('counter/<int:pk>/', ArticleCounterRedirectView.as_view(), name='article-counter'),
    6. path('details/<int:pk>/', ArticleDetailView.as_view(), name='article-detail'),
    7. path('go-to-django/', RedirectView.as_view(url='https://djangoproject.com'), name='go-to-django'),
    8. ]

    属性

    • url

      要重定向到的 URL,作为一个字符串。或者 None 引发 410(Gone)HTTP 错误。

    • pattern_name

      要重定向到的 URL 模式的名称。重定向将使用与此视图传递的相同的 args 和 kwargs 来完成。

    • permanent

      重定向是否应该是永久的。这里唯一的区别是返回的 HTTP 状态码。如果 True,那么重定向将使用状态码 301。如果 False,那么重定向将使用状态码 302。默认情况下,permanentFalse

    • query_string

      是否将 GET 查询字符串传递到新位置。如果 True`,那么查询字符串将被附加到 URL 中。如果 False,那么查询字符串将被丢弃。默认情况下,query_stringFalse

    方法