对CBV视图的探究(1)数据显示视图

简介: 对CBV视图的探究(1)数据显示视图

CBV

Class Base Views

视图类通过定义和声明类的的形式实现的,根据用途分成三部分,数据显示视图,数据操作视图,日期筛选视图。


数据显示视图

数据显示视图是将后台的数据展示在网页上,数据主要来自四个模型,一共定义了4个视图类。


RedirectView:用于实现HTTP重定向,默认情况下只定义get请求

视图类RedirectView用于实现HTTP重定向功能,即网页跳转功能,在Django 源码里可以看到视图类RedirectView的定义过程。

class RedirectView(View):

   """Provide a redirect on any GET request."""

   permanent = False

   url = None

   pattern_name = None

   query_string = False

   def get_redirect_url(self, *args, **kwargs):

       """

       Return the URL redirect to. Keyword arguments from the URL pattern

       match generating the redirect request are provided as kwargs to this

       method.

       """

       if self.url:

           url = self.url % kwargs

       elif self.pattern_name:

           url = reverse(self.pattern_name, args=args, kwargs=kwargs)

       else:

           return None

       args = self.request.META.get('QUERY_STRING', '')

       if args and self.query_string:

           url = "%s?%s" % (url, args)

       return url

   def get(self, request, *args, **kwargs):

       url = self.get_redirect_url(*args, **kwargs)

       if url:

           if self.permanent:

               return HttpResponsePermanentRedirect(url)

           else:

               return HttpResponseRedirect(url)

       else:

           logger.warning(

               'Gone: %s', request.path,

               extra={'status_code': 410, 'request': request}

           )

           return HttpResponseGone()

   def head(self, request, *args, **kwargs):

       return self.get(request, *args, **kwargs)

   def post(self, request, *args, **kwargs):

       return self.get(request, *args, **kwargs)

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

       return self.get(request, *args, **kwargs)

   def delete(self, request, *args, **kwargs):

       return self.get(request, *args, **kwargs)

   def put(self, request, *args, **kwargs):

       return self.get(request, *args, **kwargs)

   def patch(self, request, *args, **kwargs):

       return self.get(request, *args, **kwargs)

在视图RedirectView定义了4个属性和八个类方法


permanent:根据属性值的真假来选择重定向方式,若为True,则HTTP状态码为302,否则HTTP状态码为301。

url:代表重定向的路由地址。

pattern_name:代表重定向的路由命名。如果已设置参数url,则无须设置该参数,否则提升异常信息。

query_string:是否将当前路由地址的请求参数传递到重定向的路由地址。

get_redirect_url():根据属性pattern_name所指向的路由命名来生成响应的路由地址。

get():触发HTTP的GET请求所执行的响应处理。

剩余的类方法head(),post()等方法都HTTP的不同请求方式,都由get方法完成响应处理。

当我们的需求比较复杂时,我们可以通过重写RedirectView来满足自己复杂的需求。


基础视图TemplateView

视图类TemplateView是所有基类最基础的应用类,开发者可以直接使用应用视图,它继承多个视图类,TemplateResponseMixin,ContextMixin和View。在Pycharn里看视图类TemplateView的源码。


lass TemplateView(TemplateResponseMixin, ContextMixin, View):

   """

   Render a template. Pass keyword arguments from the URLconf to the context.

   """

   def get(self, request, *args, **kwargs):

       context = self.get_context_data(**kwargs)

       return self.render_to_response(context)

之定义了get方法,get方法又调用了get_context_data()和render_to_response()从而完成HTTP请求的响应过程。类方法get()所调用的函数方法来自父类TemplateResonseMixin和ContextMixin。


列表视图ListView

列表视图ListView的基层类是由TemplateResponseMixin、ContexMixin和View组成的,在这些基层类的基础上加入了模型的操作方法,


all_empty:在模型查询数据不存在的情况下是否显示页面,若为False并且数据不存在时,则引发404异常,默认值为True。

queryset:代表模型的查询对象,这是对模型对象进行查询操作所形成的查询对象。

model:代表模型,模型以类表示,一个模型代表一张数据表

paginte_by:代表每一页所显示的数据量。

paginte_orphans:为防止最后一页数据过少可以设置包含的溢出数量。

ordering:主要对属性queryset的查询结果进行排序。


相关文章
|
4月前
|
SQL 存储 BI
什么是视图?详细解析与应用指南
【8月更文挑战第31天】
742 0
|
7月前
|
SQL 存储 安全
|
SQL 存储 关系型数据库
第14章_视图
第14章_视图
87 0
|
7月前
|
SQL 前端开发 安全
视图的作用
视图的作用。
65 1
|
7月前
|
存储 算法 关系型数据库
了解并使用视图
【1月更文挑战第13天】了解并使用视图。
60 1
|
JSON 安全 前端开发
【Django学习】(四)子应用改写函数视图为类视图
【Django学习】(四)子应用改写函数视图为类视图
|
编解码 Android开发
视图 总结 基础
DragViewTaskRelease 使用FrameLayout布局(可以用其他的),内嵌imageView实现悬浮拖动和点击事件,继承View的ontouchEvent进行动作监听和移动 getX(),getY()等方法的区别(图解) BarPercentView 条形进度条(可设置 线性渐变-背景色-进度条颜色-进度条高度) 游戏下载进度条显示 zidingyiView矩形进度框,在构造函数里定义基础属性,初始化布局,定义俩个矩形,onMeasure获取宽高和onDraw方法显示
|
存储
视图
视图
122 0