CBV视图

128 阅读3分钟

数据显示视图

django 封装了四个视图类,分别是:

RedirectView 用于实现Http重定向,默认只定义GET请求的处理方法

TemplateView 基础视图,连接模板上下文,默认只定义GET请求的处理方法

ListView 在基础视图上以列表显示

DetailView 在基础视图上进行详细展示

基础视图类 TemplateView(TemplateResponseMixin,ContextMinix,View)

*基础视图类只定义get方法,调用继承类ContextMinix的get_context_data()获取模板的上下文,将数据转换成HTML网页数据。

*get方法返回TemplateResponseMinin的方法render_to_response(),实现响应处理,该类定义四个属性和两个类方法

*template_name:模板文件的文件名
*template_engine:解析模板的模板引擎,默认为None
*response_class:设置HTTP的响应类,默认为None
*context_type:设置响应类容的数据格式
*render_to_response(): 实现响应处理
*get_template_names(): 获取属性template_name的值

示例如下:

class index(TemplateView):
    template_name = 'index.html'
    template_engine = None
    content_type = None
    extra_context = {'title':'This is GET'}

    #重定义模板上下文获取方式
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['value'] = 'i am MyDjango'
        return context

    #定义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)

列表视图ListVoew(MUltiple0TemplateResponseMixin,BaseListView)类

列表视图底层类由TemplateResponseMixin,ContextMixin,View组成,有着基础视图TemplateView类的所有方法和属性,并且扩展了属性和方法

*allow_empty:在查询数据不存在时是否显示页面,默认为True,Flase时,404
*queryset:模型的查询对象
*model:模型
*paginate_by: 每一页显示的数据量
*paginate_orphans: 最后一页可以溢出的数据量,默认0
*context_object_name:模板上下文
*pagibator_class: 分页的功能
*page_kwarg: 分页参数名称
*odering 对查询结果排序
*get_queryset() 获取属性querset的值
*get_ordering() 获取属性ordering的值
*paginate_queryset() 对queryset的数据进行分页处理
*get_paginate_by() 获取每页的数据量
*get_paginateor() 返回当前页数对应的数据信息
*get_paginate_orphans() 获取最后一页可以包含溢出的数据量
*get_allow_empty() 获取allow_empty的值
*get_paginate_object_name() 设置模板上下文名称
*get_context_date() 获取模板上下文
*template_name_suffix() 设置模板后缀名
*get_template_names() 获取属性template_name
*get() 定义HTTP的GET请求处理方法

示例如下:

from django.views.generic import ListView
from .models import PersonInfo
class index(ListView):
    template_name = 'index_1.html'
    extra_context = {'title':'人员信息表'}
    #查询模型
    queryset = PersonInfo.objects.all()
    #每页显示一条数据
    paginate_by = 1

详细视图类DetailView(SingLeObjectTemplateResponseMixin,BaseDetailView)

详细视图类的底层继承类与列表视图类一样,增添了以下属性和方法:

*template_name_field 模板名称
*template_name_suffix 文件后缀 默认是_detail
*get() GET()请求处理方法
*model 模型
*queryset 模型查询对象
*context_object_name 设置模板上下文
*slug_field 根据字段作为查询对象
*slug_url_kwarg 路由地址的某个变量作为模型字段的查询范围
*pk_url_kwarg 路由地址的某个变量作为主键的查询范围
*query_pk_and_slug 若为True,则用上面两个属性进行查询
*get_object() 对模型进行单条数据查询
*get_queryset() 获取queryset属性值
*get_slug_field() 根据slug_field查询对应数据
*get_context_object_name() 设置模板上下文
*get_context_data() 获取模板上下文

数据操作视图

数据操作视图分为四类,为:

*FormView 表单操作视图。用于数据验证,响应输出等

*CreateView 表单更新视图,实现数据更新

*UpdateView 数据修改视图 实现数据修改

*DeleteView 数据删除视图 实现数据删除

表单视图 FormView(TemplateResponseMixin,BaseFormView)

表单视图的底层类和继承视图一样,新增了如下属性和方法:

*initial 初始化表单数据
*form_class 设置表单类
*success_url 设置重定向的路由地址
*prefix 设置表单前缀
*get_initial() 获取表单初始化数据
*get_prefix() 获取表单前缀
*get_form_class() 获取表单类
*get_form() 调用get_form_kwargs()完成表单实例化
*get_form_kwargs() 实例化表单
*get_success_url() 获取重定向路由地址
*form_vaild() 重定向到指定路由地址
*form_invaild() 表单无效返回空白表单
*get_context_data() 获取模板上下文
*get() GET处理方法
*post() POST请求的处理方法