基本视图¶
以下三个类提供了创建Django视图所需的大部分功能。您可以将它们视为 parent 视图,可以自行使用或继承。他们可能不提供项目所需的所有功能,在这种情况下有Mixins和通用基于类的视图。
Django的许多内置的基于类的视图继承自其他基于类的视图或各种混合。因为这个继承链是非常重要的,祖先类被记录在 祖先(MRO) 的标题下。 MRO是Method Resolution Order的缩写。
View
¶
-
class
django.views.generic.base.
View
¶ 基于主类的基本视图。所有其他基于类的视图继承此基本类。它不是严格的通用视图,因此也可以从
django.views
导入。Changed in Django 1.10:添加了从
django.views
导入的能力。方法流程图
示例views.py:
from django.http import HttpResponse from django.views import View class MyView(View): def get(self, request, *args, **kwargs): return HttpResponse('Hello, World!')
示例urls.py:
from django.conf.urls import url from myapp.views import MyView urlpatterns = [ url(r'^mine/$', MyView.as_view(), name='my-view'), ]
属性
-
http_method_names
¶ 此视图将接受的HTTP方法名称列表。
默认:
['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
方法
-
classmethod
as_view
(**initkwargs)¶ 返回接受请求并返回响应的可调用视图:
response = MyView.as_view()(request)
New in Django 1.9.返回的视图具有
view_class
和view_initkwargs
属性。
-
dispatch
(request, *args, **kwargs)¶ 视图的
view
部分 - 接受request
参数和参数的方法,并返回HTTP响应。默认实现将检查HTTP方法,并尝试委派给与HTTP方法匹配的方法;
GET
将被委派给get()
,POST
到post()
,等等。默认情况下,
HEAD
请求将委派给get()
。如果您需要以与GET
不同的方式处理HEAD
请求,则可以覆盖head()
方法。参见 支持其他HTTP方法 的例子。
-
http_method_not_allowed
(request, *args, **kwargs)¶ 如果使用HTTP方法调用视图不支持,则调用此方法。
默认实现返回
HttpResponseNotAllowed
,其中包含纯文本中允许的方法列表。
-
options
(request, *args, **kwargs)¶ 处理响应对OPTIONS HTTP动词的请求。返回一个包含视图允许的HTTP方法名称列表的
Allow
头的响应。
-
TemplateView
¶
-
class
django.views.generic.base.
TemplateView
¶ 呈现给定的模板,其中上下文包含在URL中捕获的参数。
祖先(MRO)
此视图从以下视图继承方法和属性:
方法流程图
示例views.py:
from django.views.generic.base import TemplateView from articles.models import Article class HomePageView(TemplateView): template_name = "home.html" def get_context_data(self, **kwargs): context = super(HomePageView, self).get_context_data(**kwargs) context['latest_articles'] = Article.objects.all()[:5] return context
示例urls.py:
from django.conf.urls import url from myapp.views import HomePageView urlpatterns = [ url(r'^$', HomePageView.as_view(), name='home'), ]
上下文
使用从提供视图的网址格式捕获的关键字参数填充(通过
ContextMixin
)。
RedirectView
¶
-
class
django.views.generic.base.
RedirectView
¶ 重定向到指定的URL。
给定的URL可以包含字典样式的字符串格式,其将针对URL中捕获的参数进行插值。因为关键字插值是 always 完成的(即使没有传入任何参数),URL中的任何
"%"
字符必须写为"%%"
,以便Python将它们转换为输出上的单个百分号。如果给定的URL是
None
,Django将返回HttpResponseGone
(410)。祖先(MRO)
此视图从以下视图继承方法和属性:
方法流程图
示例views.py:
from django.shortcuts import get_object_or_404 from django.views.generic.base import RedirectView from articles.models import Article class ArticleCounterRedirectView(RedirectView): permanent = False query_string = True pattern_name = 'article-detail' def get_redirect_url(self, *args, **kwargs): article = get_object_or_404(Article, pk=kwargs['pk']) article.update_counter() return super(ArticleCounterRedirectView, self).get_redirect_url(*args, **kwargs)
示例urls.py:
from django.conf.urls import url from django.views.generic.base import RedirectView from article.views import ArticleCounterRedirectView, ArticleDetail urlpatterns = [ url(r'^counter/(?P<pk>[0-9]+)/$', ArticleCounterRedirectView.as_view(), name='article-counter'), url(r'^details/(?P<pk>[0-9]+)/$', ArticleDetail.as_view(), name='article-detail'), url(r'^go-to-django/$', RedirectView.as_view(url='https://djangoproject.com'), name='go-to-django'), ]
属性
-
url
¶ 要重定向到的网址,作为字符串。或
None
引发410(Gone)HTTP错误。
-
pattern_name
¶ 要重定向到的网址格式的名称。将使用与为此视图传递的相同的args和kwargs进行倒置。
-
permanent
¶ 重定向是否应该是永久的。这里唯一的区别是返回的HTTP状态代码。如果
True
,则重定向将使用状态代码301.如果False
,则重定向将使用状态代码302.默认情况下,permanent
是False
。Changed in Django 1.9:permanent
属性的默认值从True
更改为False
。
-
query_string
¶ 是否将GET查询字符串传递到新位置。如果是
True
,则将查询字符串附加到URL。如果是False
,那么查询字符串将被丢弃。默认情况下,query_string
是False
。
方法
-
get_redirect_url
(*args, **kwargs)¶ 构造重定向的目标网址。
默认实现使用
url
作为起始字符串,并使用URL中捕获的命名组在该字符串中执行%
命名参数的扩展。如果未设置
url
,get_redirect_url()
将尝试使用URL中捕获的内容(使用命名组和未命名组)来反转pattern_name
。如果
query_string
请求,它还会将查询字符串附加到生成的URL。子类可以实现他们想要的任何行为,只要该方法返回一个重定向就绪的URL字符串。
-