django-CBV

  • FBV : 基于函数的视图
  • CBV : 基于类的视图

CBV类的基类View


class View:""""""# 定义 请求的方式 http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']def __init__(self, **kwargs):"""构建View对象,将格外传过来的字典中的键作为 View对象的属性, value作为属性值"""# Go through keyword arguments, and either save their values to our# instance, or raise an error.for key, value in kwargs.items():setattr(self, key, value)@classonlymethoddef as_view(cls, **initkwargs):"""as_view 是将 视图类 转换为 视图函数"""for key in initkwargs:# as_view 传过来的额外参数 不能是 http_method_names 定义的名字if key in cls.http_method_names:raise TypeError('The method name %s is not accepted as a keyword argument ''to %s().' % (key, cls.__name__))# as_view 传过来的额外参数 不能是 View对象的属性 或者 方法if not hasattr(cls, key):raise TypeError("%s() received an invalid keyword %r. as_view ""only accepts arguments that are already ""attributes of the class." % (cls.__name__, key))def view(request, *args, **kwargs):"""处理业务、返回 HttpResponse"""# 初始化 View对象self = cls(**initkwargs)#  将 request, args, kwargs 赋值给 当前 View对象self.setup(request, *args, **kwargs)if not hasattr(self, 'request'):raise AttributeError("%s instance has no 'request' attribute. Did you override ""setup() and forget to call super()?" % cls.__name__)# 通过请求方式名 或者 View对象的 方法名,并调用方法、返回HttpResponsereturn self.dispatch(request, *args, **kwargs)view.view_class = clsview.view_initkwargs = initkwargs# take name and docstring from classupdate_wrapper(view, cls, updated=())# and possible attributes set by decorators# like csrf_exempt from dispatchupdate_wrapper(view, cls.dispatch, assigned=())return viewdef setup(self, request, *args, **kwargs):"""Initialize attributes shared by all view methods."""if hasattr(self, 'get') and not hasattr(self, 'head'):self.head = self.getself.request = requestself.args = argsself.kwargs = kwargsdef dispatch(self, request, *args, **kwargs):"""将 请求 分发给 对应的 请求方法"""if request.method.lower() in self.http_method_names:# 获取 View对象 和 请求方法名 相同 方法handler = getattr(self, request.method.lower(), self.http_method_not_allowed)else:handler = self.http_method_not_allowed# 调用 视图函数、完成业务处理    return handler(request, *args, **kwargs)def http_method_not_allowed(self, request, *args, **kwargs):"""405 请求方法不允许"""logger.warning('Method Not Allowed (%s): %s', request.method, request.path,extra={'status_code': 405, 'request': request})return HttpResponseNotAllowed(self._allowed_methods())def options(self, request, *args, **kwargs):"""获取允许的所有请求方法""""""Handle responding to requests for the OPTIONS HTTP verb."""response = HttpResponse()response['Allow'] = ', '.join(self._allowed_methods())response['Content-Length'] = '0'return responsedef _allowed_methods(self):"""获取当前 View 允许的所有请求方法、并转为大写"""return [m.upper() for m in self.http_method_names if hasattr(self, m)]

通用视图

  • ListView
  • DetailView
  • CreateView
  • DeleteView
  • UpdateView

get_queryset()

根据 queryset 或者 model 查询 对应模型的所有数据通过 ordering 进行排序

django的CBV相关推荐

  1. Django的CBV与FBV

    FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV CBV(class base v ...

  2. django的CBV与FBV介绍

    FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV CBV(class base v ...

  3. django中CBV

    08.13自我总结 django中CBV 一.django处理业务逻辑的两种方式 FBV (function based views):使用函数来处理业务逻辑 CBV (class based vie ...

  4. Django(补充CBV,FBV)

    我们常用的都是FBV模式,就是url对应views.py中的函数 CBV模式:url------类 ===================== CBV实现过程: 浏览器通过url先执行Login类中的 ...

  5. django,cbv,模板层

    今日内容:  1,三板斧  2,FBV与CBV  3,Django中settings源码  4,模板层   模板语法   过滤器   标签   自定义标签,   自定义过滤器 ,   自定义inclu ...

  6. Django的CBV和FBV

    什么是CBV,什么是FBV? CBV是通过类来处理请求的 FBV是通过函数来处理请求的 使用CBV的好处 首先是可以通过不同的函数针对不同的请求,提高了代码的可阅读性 其次是提高了代码的复用性 代码对 ...

  7. Django View(视图系统)

    Django View 官方文档 一个视图函数(类),简称视图,是一个简单的 Python 函数(类),它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误 ...

  8. 框架之---Django

    Django是功能最为健全的一个WEB框架,但就因为过于健全,显得过于臃肿.但是Django中最为正要的就是Middleware.ORM和From表单. Django之web本质 Django之初 D ...

  9. 源码剖析Django REST framework的认证方式及自定义认证

    源码剖析Django REST framework的认证方式 由Django的CBV模式流程,可以知道在url匹配完成后,会执行自定义的类中的as_view方法. 如果自定义的类中没有定义as_vie ...

最新文章

  1. Window VNC远程控制LINUX:VNC详细配置介绍
  2. C语言实现牛顿迭代法
  3. mysql怎么使用sql语句查看表的编码_MySQL中使用SQL语句查看某个表的编码
  4. OpenCV图像的轮廓的匹配
  5. TCL电子港股暴涨10% 股价创5年新高
  6. mysql master slave 灾备技术_MySQL灾备恢复在线主从复制变成主主复制及多源复制【转】...
  7. 计算机原理期末考试,计算机原理期末考试题
  8. python uwsgi_python nginx+uwsgi+WSGI 处理请求详解
  9. Silverlight Telerik控件学习:TreeView数据绑定并初始化选中状态、PanelBar的Accordion效果、TabPanel、Frame基本使用...
  10. STC学习:振动声光报警器
  11. 兄弟打印机内存已满清零方法_打印机是如何清零的?兄弟打印机清零方法
  12. UEditor富文本编辑器图片粘贴和上传问题
  13. 天津智慧路灯+“新基建”示范区建设启动、沪苏通长江公铁大桥
  14. 一款在Linux下运行Android应用的软件——xDroid
  15. 大写罗马数字(大写罗马数字3)
  16. 如何将支付宝小程序迁移至微信/FinClip运行
  17. Win10 中文输入法关闭 Ctrl+Shift+B 快捷键
  18. Java中有哪些锁?
  19. 移动端布局 - rem布局
  20. 南卡和三星哪款蓝牙耳机音质好些?高颜值且音质好的蓝牙耳机测评

热门文章

  1. OSTU (大津算法)
  2. 【详解】URL及HTTP协议详解
  3. 6-3 结构体-成绩单排序
  4. 微型计算机使用范围描述,电大 网考 计算机应用基础
  5. Go singleflight
  6. 《哈利·波特:霍格沃茨之谜》邀请玩家为魔法世界的圣诞节装饰大厅
  7. lua中string.find用法
  8. Android6.0新特性把外置TF卡作为内置存储使用
  9. 软件工程--软件工程概述
  10. 第一章、Linux是什么