class view

巴扎黑
巴扎黑Original
2017-06-23 16:30:431646browse

Class view

Usage principles
  • Code Less is better

  • Never duplicate code

  • View should only contain presentation logic, not business logic

  • Keep view logic clear and simple

  • Don’t use CBVs as error handlers for 403, 404, 500

  • Keep Mixin is simple and clear

mixin
In programming, mixin refers to A class that inherits it provides additional functionality, but it cannot be used alone
In programming languages ​​with multiple inheritance capabilities, mixins can add additional functionality or methods to the class. In Django, we can Use mixins to provide more extensibility for CBVs. Of course, during the class inheritance process, we recommend the following principles:
  • The View provided by Django itself is always on the far right

  • mixin is on the left side of the above view in turn

  • mixin always inherits from Python’s object type

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

View

django.views.generic.base.View
The core of the class-based base view. All other class-based views inherit from this base class.
 django.shortcuts  django.views.generic state =http_method_names = [, , , , , , ,  dispatch(self, request, *args, **(= super(Index,self).dispatch(request, *args, **( HttpResponse( HttpResponse()

TemplateView

Inherits methods and properties from the following views
  1. <span class="pln">django<span class="pun">.<span class="pln">views<span class="pun">.<span class="kwd">generic<span class="pun">.<span class="pln">base<span class="pun">.<span class="typ">TemplateResponseMixin</span></span></span></span> </span></span></span></span></span>

  2. #django<span class="pln">.<span class="pun">views<span class="pln">.<span class="pun">generic<span class="kwd">.<span class="pun">base<span class="pln">.<span class="pun">ContextMixin<span class="typ"></span></span></span></span></span></span></span></span></span>

  3. ##django.<span class="pln">views<span class="pun">.<span class="pln">generic<span class="pun">.<span class="kwd">base<span class="pun">.<span class="pln">View <span class="pun"><span class="typ"></span></span></span></span></span></span></span></span></span>

#Example
 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

Inherits methods and properties from:

    ##django
  1. .

    views.<span class="pln">generic<span class="pun">.<span class="pln">base<span class="pun">.<span class="kwd">View<span class="pun"><span class="pln"><span class="pun"><span class="typ"></span></span> </span></span></span></span></span></span></span>

##Example
 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

is a detailed view of one of the many

object

of these publishers Parsing, the main data it obtains is an object<span class="typ">. <span class="pun"><span class="pln"><span class="pun"><span class="pln"><span class="pun"></span></span></span></span></span></span>Inherits methods and properties from the following views:

  1. <span class="pln">django<span class="pun">.<span class="pln">views<span class="pun">.<span class="pln">generic<span class="pun">.<span class="pln">detail<span class="pun">.<span class="typ">SingleObjectTemplateResponseMixin</span></span></span></span></span></span></span></span></span>

  2. <span class="pln">django<span class="pun">.<span class="pln">views<span class="pun">.<span class="pln">generic<span class="pun">.<span class="pln">base<span class="pun">.<span class="typ">TemplateResponseMixin</span></span></span></span></span></span></span></span></span>

  3. <span class="pln">django<span class="pun">.<span class="pln">views<span class="pun">.<span class="pln">generic<span class="pun">.<span class="pln">detail<span class="pun">.<span class="typ">BaseDetailView</span></span></span></span></span></span></span></span></span>

  4. <span class="pln">django<span class="pun">.<span class="pln">views<span class="pun">.<span class="pln">generic<span class="pun">.<span class="pln">detail<span class="pun">.<span class="typ">SingleObjectMixin</span></span></span></span></span></span></span></span></span>

  5. <span class="pln">django<span class="pun">.<span class="pln">views<span class="pun">.<span class="pln">generic<span class="pun">.<span class="pln">base<span class="pun">.<span class="typ">View</span></span></span></span></span></span></span></span></span>

 
示例
 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. <span class="pln">model<span class="pun">:获取这个<span class="pln">model<span class="pun">相关的所有数据</span></span></span></span>

  2. <span class="pln">queryset<span class="pun">:从这个<span class="pln">queryset<span class="pun">中获取指定的数据。</span></span></span></span>

  3. <span class="pln">queryset<span class="pun">的优先级高于<span class="pln">model</span></span></span>

  4. <span class="pun">它所获取的数据是通过<span class="pln">context<span class="pun">中<span class="pln">object_list<span class="pun">这个变量来传递的</span></span></span></span></span>

 
 
从以下视图继承方法和属性:
  1. <span class="pln">django<span class="pun">.<span class="pln">views<span class="pun">.<span class="pln">generic<span class="pun">.<span class="pln">list<span class="pun">.<span class="typ">MultipleObjectTemplateResponseMixin</span></span></span></span></span></span></span></span></span>

  2. <span class="pln">django<span class="pun">.<span class="pln">views<span class="pun">.<span class="pln">generic<span class="pun">.<span class="pln">base<span class="pun">.<span class="typ">TemplateResponseMixin</span></span></span></span></span></span></span></span></span>

  3. <span class="pln">django<span class="pun">.<span class="pln">views<span class="pun">.<span class="pln">generic<span class="pun">.<span class="pln">list<span class="pun">.<span class="typ">BaseListView</span></span></span></span></span></span></span></span></span>

  4. <span class="pln">django<span class="pun">.<span class="pln">views<span class="pun">.<span class="pln">generic<span class="pun">.<span class="pln">list<span class="pun">.<span class="typ">MultipleObjectMixin</span></span></span></span></span></span></span></span></span>

  5. <span class="pln">django<span class="pun">.<span class="pln">views<span class="pun">.<span class="pln">gen</span></span></span></span></span>

 
 
示例
 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

 

 
 

The above is the detailed content of class view. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn