django class-based-views

Base views
下面三个class为创建Django视图提供了很多的功能。你可以把那些可以自己起作用或者从别处继承的视图当做父视图(parent views)。他们可能无法提供你的项目所需的所有功能,为了解决这种情况django给你提供了Mixins(混合类型)和Generic class-based views(基于类的泛型视图)。

View
class django.views.generic.base.View
基于主类的基视图。所有其他的基于类的视图都继承这个基类。严格意义上他不是一般视图,他也可以从django.views引入
方法
  1. dispatch()
  2. http_method_not_allowed
  3. options()

例子 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']

Methods
类方法 as_view
返回一个视图,其中包含request和response
response = MyView.as_view()(request)
返回的视图含有 view_class和view_initkwargs两个属性
当视图在 request/response中被调用,HTTPRequest就被赋值给request属性。任何从url中获取的参数都会分别的赋值给 args和kwargs。然后dispatch()被调用

分发 dispatch(request,*args,**kwargs)
视图的一部分,这个方法接收request和其他的参数,返回一个HTTP response。
默认实现时会检查这个HTTP方法,并委托给匹配的HTTP方法;例如 GET会被委托给get(),POST会委托给post()。
默认把HEAD请求委托给get()。如果需要有额外的修改可以重写head()。例子在 https://docs.djangoproject.com/en/1.11/topics/class-based-views/#supporting-other-http-methods

http_method_not_allowed(request, *args, **kwargs)
如果视图调用了一个不被支持的HTTP方法,这个方法就会被调用,顶替上去。
默认的实现会返回HttpResponseNotAllowed包含一个支持的方法的list,在一个普通的text里。

options(request, *args, **kwargs)
对HTTP的处理。返回response包含视图所允许的HTTP方法名。

TemplateView
class django.views.generic.base.TemplateView
通过URL中的参数渲染一个模板
这个视图从以下视图继承而来
  1. django.views.generic.base.TemplateResponseMixin
  2. django.views.generic.base.ContextMixin
  3. django.views.generic.base.View
方法
  1. dispatch()
  2. http_method_not_allowed()
  3. get_context_data()
例子 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'),
]

context
从url中获取的关键字参数 随便百度一下怎么url传值

RedirectView
class django.views.generic.base.RedirectView
重定位到置顶的url
所给的url可能包含一些带插值的字符串。因为关键词插值总是做完的,所以所有%都需要写成%%,python会重写成一个百分号%输出。
如果所给的url是NONE。Django会返回 一个410错误
这个视图从以下一个视图继承而来
  1. django.views.generic.base.View
方法
  1. dispatch()
  2. http_method_not_allowed()
  3. get_redirect_url()
例子 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
重定向的url路径,或者为none时返回410错误

pattern_name
url的名字

permanent 永久性
关于重定向是否是永久的,如果True,返回的状态码是301,如果是False,返回的状态码是302.
默认是False。

query_string
查询字符串是否会被带到新的url地址后面。如果是True,查询字符串会被添加到url后面,如果是Fasle,查询字符串被丢弃。
默认是False。

方法
get_redirect_url(*arg, **kwargs)
为重定向解释url
默认的处理是把url作为一个字符串,把%后面的参数作为一组
如果没有设定url,这个方法会做一个尝试(我还不懂是什么尝试)
如果有query_string,他会被添加到处理过的url后。子类会实现他们想实现的东西,只要这个方法返回一个字符串url。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值