Django Class Views
一、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的更多相关文章
- Python Django 之 Views HttpRequest HttpReponse
一.Python Django 之 Views 数据交互 http请求中产生两个人核心对象: http请求:HttpRequest对象 http响应:HttpReponse对象 所在位置django. ...
- [Django笔记] views.py 深入学习
views.py 是django MTV 中的主要逻辑层,相当于MVC中的 Controller 以下的实例都基于这样一个路由表: urlpatterns = [ url(r'^(index)?$', ...
- Django之views系统
Django的View(视图)简介 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...
- Django中views笔记
reverse反解析 #路由中定义namespace.name,reverse可将其转换为url url = reverse('namespace:name') return redirect(url ...
- django中views中方法的request参数
知其然亦要知其所以然 views每个方法的参数都是request,那么问题来了,request为何物? 首先,几乎每个方法都是取数据(无论是从数据库,还是从第三方接口),然后进行一定的处理,之后传给前 ...
- Django之views
一 URL补充 二 Views试图函数 一 URL补充 1 MTV模型 2 django建立流程(用命令版) (1)django-admin startproject projectname (2) ...
- Django之views视图函数
views视图函数属于MTV中逻辑处理的部分视图函数包含着两个对象,HttpRequest对象和HttpResponse对象 一.HttpRequest对象 HttpRequest对象在Django中 ...
- 关于django Class-based views的理解
django是mvt模式,其中v就是这个显示逻辑部分,简单来讲,view函数可以说是接收request,然后处理,返回response的主体函数. 对于一些简单的逻辑关系,可以用直接用函数模式来进行处 ...
- Django的views视图系统
老师的博客:http://www.cnblogs.com/liwenzhou/articles/8305104.html 以看老师的博客为主 一个视图函数(类),简称视图,是一个简单的Python 函 ...
随机推荐
- php抽象类和接口的区别
php抽象类和接口的区别 tags:抽象类 接口 抽象类和接口 php 引言:这是一个面试经常被问到的问题,也是一个经典问题.我们尽量引用官方权威的说明或者经过实验来证明本文所说的内容准确性. 抽象类 ...
- 静态链表C语言数据结构
静态链表就是将数组实现单链表: int Malloc_SLL(StaticLinkList space) { int i = space[0].cur;//取得第一个头节点的下标 if( space[ ...
- it's a big trick
今天,正式的登上了我注册已久的博客园,最初注册园子得出发点是记录生活点滴和学习工作的心得的,那就不忘初心,从头开始吧. 从校园到工作,从东北到南方 我们毕业啦 谁说毕业遥遥无期,转眼就要各奔东西. 是 ...
- Excel+DDT数据驱动实例
一.首先安装dtt模块 数据驱动原理 1.测试数据为多个字典的list类型 2.测试类前加修饰@ddt.ddt 3.case前加修饰@ddt.data() 4.运行后用例会自动加载成N个单独的用例 二 ...
- vue组件详解(三)——组件通信
组件之间通信可以用下图表示: 组件关系可分为父子组件通信.兄弟组件通信.跨级组件通信. 一.自定义事件 当子组件需要向父组件传递数据时,就要用到自定义事件. 子组件用$emit ()来触发事件,父组件 ...
- 使用freemaker 导出word 含多张图片,若无图片则显示文本信息
1.使用的Microsoft Office 2007,添加一个无边框的表格,并插入一张图片,最后另存为编码utf-8,一开始保存的word xml格式的,图片的base64编码位于文档最后,暂时没有找 ...
- Oracle10g物理DG详细配置方法及步骤
--测试环境: OS:Redhat linux(64) Primary: IP:192.168.94.198 SID:dgdb1 Hostname:dg1 DB_U ...
- httpClient解决post请求重定向的问题
import com.dadi.saas.util.HTTPUtils; import org.apache.commons.httpclient.Header; import org.apache. ...
- Docker学习笔记 - Docker的仓库
- OAuth2.0学习(1-2)OAuth2.0的一个企业级应用场景 - 新浪开放平台微博OAuth2.0认证
http://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5 开发者可以先浏览OAuth2.0的接口文档,熟悉OAuth2.0的接口及参数的含义,然后我们根据应用场景各自 ...