第五章探究CBV视图
5.1数据显示视图
CBV(class base views):以类的形式实现响应与请求处理
四个视图类:
(1)RedirectView:实现HTTP重定向
(2)TemplateView:基础视图,将数据传递给HTML模板,一般只定义get请求的处理方法
(3)ListView:在TemplateView基础上将数据以列表显示
(4)DetailView:在TemplateView基础上将数据详细显示
5.1.1 RedirectView
#项目目录下的urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(('index.urls','index'),namespace='index')),
]
#app(index)目录下urls.py
from django.urls import path
from index.views import *
urlpatterns=[
path('',index,name='index'),
#自定义turnTo类继承RedirectView,所以要使用as_view()方法,对视图类turnTo进行实例化处理
path('turnTo',turnTo.as_view(),name='turnTo'),
]
#app(index)目录下views.py
from django.shortcuts import render
from django.views.generic import RedirectView
def index(request):
return render(request,'index.html')
class turnTo(RedirectView):
#设置属性
#根据属性值的真假选择重定向方式,true,HTTP状态码为301,否则为302
permanent = False
#代表重定向的路由地址
url=None
#代表重定向的路由命名
pattern_name = 'index:index'
#是否将当前路由地址的请求参数传递到重定向的路由地址
query_string=True
#重写get_redirect_url方法
def get_redirect_url(self, *args, **kwargs):
print('This is get_redirect_url')
return super().get_redirect_url(*args,**kwargs)
#重写get方法
def get(self,request,*args,**kwargs):
print(request.META.get('HTTP_USER_AGENT'))
return super().get(request,*args,**kwargs)
5.1.2 TemplateView
#项目目录下的urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(('index.urls','index'),namespace='index')),
]
#app目录下的urls.py
from django.urls import path
from index.views import *
urlpatterns=[
path('',index.as_view(),name='index'),
]
#app目录下的views.py
from django.shortcuts import render
# Create your views here.
from django.views.generic import TemplateView
class index(TemplateView):
# 设置属性
#将模板文件index.html作为网页文件
template_name='index.html'
#设置模板引擎,默认值为None,默认使用配置文件中TEMPLATES设置的模板引擎BACKEND
template_engine=None
#设置响应内容的数据格式
content_type=None
#为模板变量设置变量值
extra_context={'title':'this is Get'}
#重定义get_context_data()方法
#在变量context里新增数据value
def get_context_data(self, **kwargs):
context=super().get_context_data(**kwargs)
context['value']='I am mydjango'
return context
#定义HTTP的post请求处理方法
def post(self,request,*args,**kwargs):
self.extra_context={'title':'This is POST'}
context=self.get_context_data(**kwargs)
return self.render_to_response(context)
#index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>Hello ,{{ title}}</h2>
<div>{{ value }}</div>
<br>
<form action="" method="post">
{% csrf_token %}
<input type="submit" value="Submit">
</form>
</body>
</html>
5.1.3 ListView
5.1.4 DetailView
5.2数据操作视图
5.2.1 表单视图FormView
5.2.2 新增视图CreateView
5.2.3 修改视图UpdateView
5.2.4 删除视图DeleteView
5.3日期筛选视图
未完待续。。。。
参考书籍《Django web应用开发实战》