PHP前端开发

类视图

百变鹏仔 3小时前 #Python
文章标签 视图

 

类视图

使用原则
  • 代码越少越好

  • 永远不要重复代码

  • View应当只包含呈现逻辑, 不应包括业务逻辑

  • 保持view逻辑清晰简单

  • 不要将CBVs用作403, 404, 500的错误处理程序

  • 保持mixin简单明了

 
 
mixin
在编程中mixin是指为继承它的class提供额外的功能, 但它自身却不能单独使用的类
在具有多继承能力的编程语言中, mixin可以为类增加额外功能或方法. 在Django中, 我们可以使用mixin为CBVs提供更多的扩展性, 当然在类继承过程中, 我们推荐以下原则:
  • Django自身提供的View永远在最右边

  • mixin依次在以上view的左边

  • mixin永远继承自Python的object类型

Django mixin库:
 
 
常用的类视图
View                    基本View 可以在任何时候使用 见后面详细介绍RedirectView            重新定向到其他URL 将访问"/log-in/"的用户重新定向到"/login/"TemplateView            显示Django 模板 一般网站中使用模板显示的页ListView                显示对象列表 文章列表页DetailView              显示对象详情 文章详细页FormView                提交From 网站联系我们或emai订阅formCreateView              创建对象 创建新文章页UpdateView              更新对象 修改文章页DeleteView              删除对象 删除文章页Generic date views      显示一段时间内的对象 按时间归类的博客

 

 

View

django.views.generic.base.View
基于类的基础视图的核心。其它所有的基于类的视图都继承自这个基础类。
 
 django.shortcuts  django.views.generic state =http_method_names = [, , , , , , ,  dispatch(self, request, *args, **(= super(Index,self).dispatch(request, *args, **( HttpResponse( HttpResponse()
 
 
 

TemplateView

从以下视图继承方法和属性
  1. django.views.generic.base.TemplateResponseMixin

  2. django.views.generic.base.ContextMixin

  3. django.views.generic.base.View

 
示例
 django.views.generic.base =  dispatch(self, request, *args, **(= super(HomePageView,self).dispatch(request, *args, **( get_context_data(self, **= super(HomePageView, self).get_context_data(**] = [,,( context

 

 
 

RedirectView

从以下视图继承方法和属性:
  1. django.views.generic.base.View

 
示例
 django.views.generic.base == False  query_string = True  pattern_name =    dispatch(self, request, *args, **(= super(ArticleRedirectView,self).dispatch(request, *args, **( get_redirect_url(self, *args, **( super(ArticleRedirectView, self).get_redirect_url(*args, **kwargs)

 

 
 
 
 
 
 

DetaliView

DetailView是对这些出版商的诸多的object中的一个进行详细解析,它获得的主数据是一个object

从以下视图继承方法和属性:
  1. django.views.generic.detail.SingleObjectTemplateResponseMixin

  2. django.views.generic.base.TemplateResponseMixin

  3. django.views.generic.detail.BaseDetailView

  4. django.views.generic.detail.SingleObjectMixin

  5. django.views.generic.base.View

 
示例
 django.contrib.auth.mixins  chouti.models ==   pk_url_kwarg =    get_context_data(self, **(context = super(UserDetailView, self).get_context_data(**] = [33, 44]

 

 

ListView

对于ListView来说,它需要显示的是多个object的信息,返回的是一个对象列表
它的数据来源是model和queryset这两个属性:
  1. model:获取这个model相关的所有数据

  2. queryset:从这个queryset中获取指定的数据。

  3. queryset的优先级高于model

  4. 它所获取的数据是通过contextobject_list这个变量来传递的

 
 
从以下视图继承方法和属性:
  1. django.views.generic.list.MultipleObjectTemplateResponseMixin

  2. django.views.generic.base.TemplateResponseMixin

  3. django.views.generic.list.BaseListView

  4. django.views.generic.list.MultipleObjectMixin

  5. django.views.gen

 
 
示例
 blog.models  django.views.generic model = Post   queryset = Post.objects.filter(title__contains = )  context_object_name =   template_name=   ( Post.objects.filter(title__contains = self.kwargs[ get_context_data(self, **(= super(PublisherList, self).get_context_data(**kwargs)  context[] = [, ]    context