基础视图
Django 内置的许多基于类的视图都是从其他基于类的视图或各种混入中继承过来的。因为这个继承链非常重要,所以祖先类被记录在 祖先(MRO) 节标题下。MRO 是方法解析顺序的缩写。
class django.views.generic.base.``View
基于主类的基本视图。所有其他基于类的视图都继承自这个基类。它并不是严格意义上的通用视图,因此也可以从 django.views
导入。
方法流程图
示例 views.py:
示例 urls.py:
from django.urls import path
from myapp.views import MyView
urlpatterns = [
path('mine/', MyView.as_view(), name='my-view'),
]
属性
http_method_names
此视图将接受的 HTT P方法名称列表。
默认:
方法
classmethod
as_view
(\*initkwargs*)返回一个接受请求并返回响应的可调用对象视图:
response = MyView.as_view()(request)
返回的视图有
view_class
和view_initkwargs
属性。当视图在请求/响应周期中被调用时, 方法将
HttpRequest
分配给视图的request
属性,将任何位置和/或关键字参数 中捕获的参数分别分配给args
和kwargs
属性。然后调用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)
该视图从以下视图继承方法和属性。
方法流程图
示例 views.py:
示例 urls.py:
from django.urls import path
from myapp.views import HomePageView
urlpatterns = [
path('', HomePageView.as_view(), name='home'),
]
上下文
- 填充(通过 )从服务于视图的 URL 模式中捕获的关键字参数。
- 你也可以使用
extra_context
关键字参数为 添加上下文。
class django.views.generic.base.``RedirectView
重定向到给定的 URL。
给定的 URL 可能包含字典式的字符串格式,将对 URL 中捕获的参数进行插值。因为关键字插值 总是 进行的(即使没有参数传递进来),URL 中的任何 "%"
字符必须写成 "%%"
,这样 Python 就会在输出中把它们转换为一个百分号。
如果给定的 UR L是 None
,Django 将返回一个 HttpResponseGone
(410)。
这个视图从以下的视图中继承了方法和属性:
方法流程图
示例 views.py:
示例 urls.py:
from django.urls import path
from django.views.generic.base import RedirectView
from article.views import ArticleCounterRedirectView, ArticleDetailView
urlpatterns = [
path('counter/<int:pk>/', ArticleCounterRedirectView.as_view(), name='article-counter'),
path('details/<int:pk>/', ArticleDetailView.as_view(), name='article-detail'),
path('go-to-django/', RedirectView.as_view(url='https://djangoproject.com'), name='go-to-django'),
]
属性
url
要重定向到的 URL,作为一个字符串。或者
None
引发 410(Gone)HTTP 错误。pattern_name
要重定向到的 URL 模式的名称。重定向将使用与此视图传递的相同的 args 和 kwargs 来完成。
permanent
重定向是否应该是永久的。这里唯一的区别是返回的 HTTP 状态码。如果
True
,那么重定向将使用状态码 301。如果False
,那么重定向将使用状态码 302。默认情况下,permanent
是False
。query_string
是否将 GET 查询字符串传递到新位置。如果 True`,那么查询字符串将被附加到 URL 中。如果
False
,那么查询字符串将被丢弃。默认情况下,query_string
是False
。
方法