一、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. 关于Android 7.0(API24)相机的问题汇总

    在开发Android项目的时候,我们会用到相机,有些时候只是开发一个普通的扫码,仅仅赋予一下 权限 就好了,但是有些时候是需要拍照和从相册中获取照片的.我们在Android 5.0以及5.0之前调用相 ...

  2. linux系统命令学习系列-例行任务管理at命令

    先来复习一下上节内容: 切换用户身份命令su 以root身份执行操作命令sudo 作业:给user1配置sudo权限,不用密码,可执行useradd命令 在/etc/sudoers文件中添加如下配置项 ...

  3. 微信小程序tab(swiper)切换

    <- wxml -> <view class="youhui"> <view ' bindtap='toggle'> 未使用 </view ...

  4. webgoat——XSS

    Stage 1: Stored XSS(存储XSS攻击 黑别人) 实验内容:主要是用户"Tom"(攻击者)在自己的个人资料中添加了恶意代码(比如最简单的<script> ...

  5. GIT入门笔记(15)- 链接到私有GitLab仓库

    GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的功能,能够浏览源代码,管理 ...

  6. WebService(1-1)webservice调用

    参考url : http://www.cnblogs.com/flying607/p/6254045.html 今天用动态创建客户端的方式调用webservice,报了这样一个错: 2017-01-0 ...

  7. C# 基于Bootstrap的三级联动

    实现效果如图: 一.声明市.县.乡对应的下拉控件select <div class="form-group"> <label class="col-sm ...

  8. ubuntu下创建python的虚拟环境

    当我们在同一个机器上进行开发多个项目,每个项目于用到包的不同版本的时候,就很尴尬. 安装python包的命令是: sudo pip install 包名 这样的话,会将包安装到/usr/local/l ...

  9. 32位centos6.5 mysql rpm包下载

    查看centos版本号和位数: http://www.cnblogs.com/grey-wolf/p/7472507.html mysql下载: 1.进入https://dev.mysql.com/d ...

  10. Vue框架

    Vue框架 环境: windows python3.6.2 Vue的cdn: <script src="https://cdn.jsdelivr.net/npm/vue"&g ...