一、Base views

View

class django.views.generic.base.View

主要的基于类的基本视图。所有其他基于类的视图都从这个基类继承而来。它不是一个通用的视图,因此也可以从django.views导入

  • 方法流程图

dispatch()

http_method_not_allowed()

options()

  • 示例(views.py)
from django.http import HttpResponse
from django.views import View
class Base_View(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'^view/$', Base_View.as_view(), name='base_view'),
]
  • 属性:http_method_names

该属性为可以接受的http请求的类型的列表:默认为 ['get','post','put','patch','delete','head','options','trace']

  • 方法:as_view(cls,**initkwargs):

    返回接受请求并返回响应的可调用视图

response = Base_View.as_view()(request)

  dispatchtp_meth(request,*args,**kwargs):

    通过用户的请求方式,getattr对应的方法来处理,没有相应的方法或该方法不在http_method_names中交由http_method_not_allowed方法处理,返回错误信息。

  http_method_not_allowed(request,*args,**kwargs):

    返回请求错误的提示信息,通过http.HttpResponseNotAllowed方法

  options(request,*args,**kwargs):

    处理对OPTIONS HTTP动词请求的响应。返回Allow包含视图允许的HTTP方法名称列表的响应。

TemplateView

  class django.views.generic.base.TemplateView

  呈现指定的模板,也会传入上下文和URLconf传递的任何关键字参数。

  • 该视图继承了以下视图的属性和方法:

    django.views.generic.bash.TemplateResponseMixin

    django.views.generic.bash.ContextMixin

    django.views.generic.bash.View

  • 方法流程图

    dispatch()

    http_method_not_allowed()

    get_context_data()

  • 示例(views.py)
class Tem_View(TemplateView):
# 在URLconf中配置的参数会覆盖在类中的关键字配置,所有这里的指定模板名称可有可无
template_name = "helei/tem_vies.html"
  • 示例(urls.py)
from django.conf.urls import url
from helei import views
urlpatterns = [
# 这两种配置的差别你懂得
# url(r'^tem/', views.Tem_View.as_view(template_name = "helei/tem_vies.html"),name='tem'),
url(r'^tem/', views.Tem_View.as_view(),name='tem'),
]
  • 其他说明:get_context_data()

    可以重写该方法来给前端传递上下文来进行模板的渲染,实例如下:

#####  views.py
class Tem_View(TemplateView):
template_name = "helei/tem_vies.html"
def get_context_data(self, **kwargs):
context = super(Tem_View,self).get_context_data(**kwargs)
context['pro_info_obj'] = models.Porject_Info.objects.all()
return context ##### helei/tern_views.html
{% for project in pro_info_obj %}
<ul>
<li>{{ project.project_name }}</li>
<li>{{ project.project_path }}</li>
<li>{{ project.project_port }}</li>
</ul>
{% endfor %}

Django2.0在as_view()中可以指定extra_context来在上下文中添加一个字典,链接

  实例:from django.views.generic import TemplateView

      TemplateView.as_view(extra_context={'title':'Custom Title'})

RedirectView

  class django.views.generic.base.RedirectView

  重定向到给定的URL,它将根据URL中获取的参数进行插值。URL中的任何‘%’字符串都必须写成‘$$’以便python 将其转换为输出中的单个百分号

  如果给定的URL是None,Django将返回HttpResponseGone(401)

  • 该视图继承了以下视图的属性和方法

    django.views.generic.base.View

  • 方法流程图

    dispatch()

    http_method_not_allowed()

    get_redirect_url()

  • 示例(views.py)
from django.views.generic.base import RedirectView
from django.shortcuts import get_object_or_404
from helei import models class Tem_Redirect_View(RedirectView):
permanent = False
query_string = True
pattern_name = 'tem_detail' # 这个名称的模板后边会提到,在detail view时。
def get_redirect_url(self, *args, **kwargs):
print args,kwargs
article = get_object_or_404(models.Porject_Info, pk=kwargs['pk'])
# article.update_counter()
return super(Tem_Redirect_View, self).get_redirect_url(*args, **kwargs)
  • 示例(urls.py)
from django.conf.urls import url
from django.contrib import admin
from helei import views
urlpatterns = [
url(r'^tem/', views.Tem_View.as_view(template_name = "helei/tem_vies.html"),name='tem'),
url(r'^tem_redirect/(?P<slug>\w+)', views.Tem_Redirect_View.as_view(),name='tem_redirect'),
url(r'^tem_list/', views.Tem_List_View.as_view(),name='tem_list'),
url(r'^tem_detail/(?P<slug>\w+)', views.Tem_Detail_View.as_view(),name='tem_detail'),
]
# 后两个urlconfif后期会用到
  • 属性

    url   作为字符串重定向到的URL,如果最后返回的url为None,这会返回410错误。

    pattern_name    要重定向到的模板名称,通过from django.urls import reverse 方法对名称进行解析得到URL。

    permanent    重定向是否为永久性的,唯一区别是返回的状态码,如果为True,那么状态码为301,如果为False,则返回的状态码为302,默认为False。

    query_string    是否将GET查询字符串传递到新的位置,True查询字符串被追加到URL。False则被丢弃,默认为False。

  • 方法

    get_redirect_url(*args,**kwargs)    构造重定向的目标URL

class Tem_Redirect_View(RedirectView):
permanent = False
query_string = True
pattern_name = 'tem_detail'
def get_redirect_url(self, *args, **kwargs):
print args,kwargs
article = get_object_or_404(models.Porject_Info, pk=kwargs['pk'])
# article.update_counter() # 这个存在疑问
return super(Tem_Redirect_View, self).get_redirect_url(*args, **kwargs)

二、Generic display views

  通用视图函数使用在显示数据时。

ListView

  Class django.views.generic.list.ListView

  当视图执行时,self.object_list将包含一个对象列表,返回一个上下文供前端模板使用

  • 该视图继承了一下视图的方法和属性

    django.views.generic.list.MultipleObjectTemplateResponseMixin

    django.views.generic.base.TemplateResponseMixin

    django.views.generic.list.BaseListView

    django.views.generic.list.MultipleObjectMixin

    django.views.generic.base.View

  • 方法流程图

    dispatch()

    http_method_not_allowed()

    get_template_names()

    get_queryset()

    get_context_object_name()

    get_context_data()

    get()

    render_to_response()

  • 示例(views.py)
class Tem_List_View(ListView):
paginate_by = 1 # 分页每页显示的数据条数,page=n 进行翻页
# page_kwarg = 'fanye' # 默认翻页为page,可以指定
model = models.Porject_Info # 返回那个库的数据
# context_object_name = 'host_info' # 上下文字段,默认为
ordering = 'project_port' # 根据该字段进行排序
template_name_suffix = 'list' # 指定模板的后缀,默认就是list
# template_engine = "" # 指定模板引擎 没看懂
# template_name = '////' # 指定模板,默认会根据models、models的appname和template_name_suffix生成模板路径和名称,前端返回的上下文为object_list和template_name
  • 示例(urls.py)
from django.conf.urls import url
from django.contrib import admin
from helei import views
urlpatterns = [
url(r'^tem_list/', views.Tem_List_View.as_view(),name='tem_list'),
]
  • 示例(project_info_list.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>Porject List</h2>
<ul>
{% for project in object_list %}
<li>{{ project.project_name }}</li>
{% endfor %}
</ul>
</body>
</html>

DetailView

  Class django.views.generic.detail.DetailView

  当这个函数执行时,self.object将包含视图正在操作的对象。

  • 该视图继承了以下视图的方法和属性

  django.views.generic.detail.SingObjectTemplateResponseMixin

  django.views.generic.base.TemplateResponseMinix

django.views.generic.detail.BaseDetailView

django.views.generic.detail.SingleObjectMixin

django.views.generic.base.View

  • 方法流程图

  dispath()

  http_method_not_allowed()

  get_template_names()

  get_slug_field()

  get_queryset()

  get_object()

  get_context_object_name()

  get_context_data()

  get()

  render_to_response()

  • 示例(views.py)
class Tem_Detail_View(DetailView):
model = models.Porject_Info
slug_field = "project_port"
slug_url_kwarg = "project_port" # 这个字段和前端传递的字段相同
context_object_name = "project_obj" # 自定上下文字段,和object共存。
  • 示例(urls.py)
from django.conf.urls import url
from django.contrib import admin
from helei import views
urlpatterns = [
url(r'^tem_detail/(?P<project_port>\w+)', views.Tem_Detail_View.as_view(),name='tem_detail'),
]
  • 示例(porject_info_detail.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<li>{{ project_obj.project_name }}</li>
<li>{{ project_obj.project_path }}</li>
<li>{{ project_obj.project_port }}</li>
<li>{{ project_obj.Domain_name }}</li>
</body>
</html>

Django Class Views的更多相关文章

  1. Python Django 之 Views HttpRequest HttpReponse

    一.Python Django 之 Views 数据交互 http请求中产生两个人核心对象: http请求:HttpRequest对象 http响应:HttpReponse对象 所在位置django. ...

  2. [Django笔记] views.py 深入学习

    views.py 是django MTV 中的主要逻辑层,相当于MVC中的 Controller 以下的实例都基于这样一个路由表: urlpatterns = [ url(r'^(index)?$', ...

  3. Django之views系统

    Django的View(视图)简介 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...

  4. Django中views笔记

    reverse反解析 #路由中定义namespace.name,reverse可将其转换为url url = reverse('namespace:name') return redirect(url ...

  5. django中views中方法的request参数

    知其然亦要知其所以然 views每个方法的参数都是request,那么问题来了,request为何物? 首先,几乎每个方法都是取数据(无论是从数据库,还是从第三方接口),然后进行一定的处理,之后传给前 ...

  6. Django之views

    一 URL补充 二 Views试图函数 一 URL补充 1 MTV模型 2  django建立流程(用命令版) (1)django-admin startproject projectname (2) ...

  7. Django之views视图函数

    views视图函数属于MTV中逻辑处理的部分视图函数包含着两个对象,HttpRequest对象和HttpResponse对象 一.HttpRequest对象 HttpRequest对象在Django中 ...

  8. 关于django Class-based views的理解

    django是mvt模式,其中v就是这个显示逻辑部分,简单来讲,view函数可以说是接收request,然后处理,返回response的主体函数. 对于一些简单的逻辑关系,可以用直接用函数模式来进行处 ...

  9. Django的views视图系统

    老师的博客:http://www.cnblogs.com/liwenzhou/articles/8305104.html 以看老师的博客为主 一个视图函数(类),简称视图,是一个简单的Python 函 ...

随机推荐

  1. NOIP2017 列队

    https://www.luogu.org/problemnew/show/P3960 p<=500 50分 模拟 每个人的出队只会影响当前行和最后一列 p<=500,有用的行只有500行 ...

  2. PostMan 调用WCF Rest服务

    问题描述: 现在有已有的WCF服务,但是ajax是不能请求到这个服务的: 需要把WCF转成WCF REST 的风格. 以下是从WCF转 WCF REST的步骤 1.首先在接口定义的地方加上 请求 We ...

  3. Python 迭代器之列表解析与生成器

     [TOC] 1. 列表解析 1.1 列表解析基础 列表解析把任意一个表达式应用到一个迭代对象中的元素 Python内置ord函数会返回一个字符的ASCII整数编码(chr函数是它的逆过程, 它将A ...

  4. 【微软大法好】VS Tools for AI全攻略(2)

    接着上文,我们来讨论如何使用Azure资源来训练我们的tensorflow项目.Azure云我个人用得很多,主要是因为微软爸爸批了150刀每月的额度,我可以愉快地玩耍. 那么针对Azure,有成套的两 ...

  5. [笔试题目]使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍?

    [笔试题目] 使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍? StringBuffer 底层是依赖了一个字符数组才能存储字符 ...

  6. python3 常用模块

    一.time与datetime模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们 ...

  7. dubbo的InvocationChain

    个人觉得dubbo比较好的设计是:一个是Cooma微容器设计.另一个就是InvocationChain了 Cooma微容器是自己实现了一套SPI,方便了用户做扩展: InvocationChain类似 ...

  8. istio入门(02)istio的架构和概念

    Istio从逻辑上可以分为数据平面和控制平面: 数据平面主要由一系列的智能代理(Envoy)组成,管理微服务之间的网络通信 控制平面负责管理和配置这些智能代理,并动态执行策略 主要由以下组件构成 En ...

  9. java集合 源码解析 学习手册

    学习路线: http://www.cnblogs.com/skywang12345/ 总结 1 总体框架 2 Collection架构 3 ArrayList详细介绍(源码解析)和使用示例 4 fai ...

  10. PHP 7.2 新功能介绍

    PHP 7.2 已經在 2017 年 11 月 30 日 正式發布 .這次發布包含新特性.功能,及優化,以讓我們寫出更好的代碼.在這篇文章裡,我將會介紹一些 PHP 7.2 最有趣的語言特性. 你可以 ...