当前位置: 首页 > news >正文

滨江建设交易门户网站如何申请网址域名

滨江建设交易门户网站,如何申请网址域名,市桥做网站的公司,中国最大的求购平台django CBV源码分析 在django框架中,视图层中的逻辑即可以使用函数处理也可以使用类进行处理,如果在视图层中使用函数处理请求,就是FBV(function base views),如果在视图层中使用类处理请求,就是CBV(class base views…

django CBV源码分析

在django框架中,视图层中的逻辑即可以使用函数处理也可以使用类进行处理,如果在视图层中使用函数处理请求,就是FBV(function base views),如果在视图层中使用类处理请求,就是CBV(class base views).这一部分主要介绍一下如何使用CBV处理请求。具体步骤如下:

当浏览器客户端向服务端发送请求时,会先通过路由匹配到对应的视图函数并加括号调用。

在路由层中书写的路由与视图函数的对应关系,路由对应的必须是一个函数地址,因此CBV本质还是FBV,由此可以推断views.MyView.as_view()中的as_view应该是一个类方法,并且该方法加括号调用后返回的结果是一个函数的内存地址。

as_view方法是自定义视图类调用的,但是自定义视图类MyView中并没有该方法,按照面向对象的属性查找顺序,as_view方法是在MyView的父类View中定义的。

当匹配到视图类的时候,会加()运行views.MyView.as_view()

views.MyView.as_view()运行的结果是返回as_view方法内部的view函数的内存地址

self.setup方法中,会将当次请求的request对象作为属性添加给当前对象

路由对应的是view方法的内存地址,因此当匹配到路由时会加()运行view方法

根据上图可以发现,运行view方法会返回self.dispatch()方法的运行结果

在dispatch方法中会获取对象(MyView的对象)的请求方式然后小写,判断是否在self.http_method_names中,如果在就通过反射将对象的请求方式小写赋值给handler,,最后返回handler加()调用。

CBV视图层中,dispatch方法可以说是前端向后端发送请求的调度员,可以根据不同的请求的方式执行视图类中对应的方法

在dispatch方法中会获取对象(`MyView`的对象)的请求方式然后小写,判断是否在`self.http_method_names`中,如果在就通过反射将对象的请求方式小写赋值给handler,,最后返回handler加`()`调用。CBV视图层中,dispatch方法可以说是前端向后端发送请求的调度员,可以根据不同的请求的方式执行视图类中对应的方法

DRF APIView源码分析

对DRF的APIView进行分析都是源于一段代码:

from rest_framework.views import APIViewurl(r'^books/', views.BookView.as_view()),

url.py中使用的as_view()是APIView类的as_view方法,使用的还是django原生的当次请求的request对象。

在运行该as_view方法时,内部调用了父类(View)的as_view方法。至此request对象还是原生的request对象。

调用父类的as_view方法,就会返回view方法的内存地址,并加()进行调用,返回dispatch方法,注意该dispatch方法不是父类View中的dispatch方法,而是APIView类自己写的dispatch方法。

在该dispatch方法中,通过request = self.initialize_request(request, *args, **kwargs)重新封装了request对象,并重新赋值给原生的request对象。

initialize_request(request, *args, **kwargs)方法中,返回了Request类实例化的对象,其中一个参数authenticators=self.get_authenticators(),调用了get_authenticators(),该方法是返回了一个列表,该列表中是authentication_classes类实例化得到的对象

authentication_classes在APIView类的配置文件中,我们可以自己写该认证类。

封装完request对象后,回到dispatch方法,继续向下执行到self.initial(request, *args, **kwargs),在该方法中会定义三个认证组件(认证组件 权限组件 限流组件)

再次返回到dispatch方法中,就会根据当此请求的请求方式完成视图类方法内的调度

运行完dispatch方法后回到as_view方法中,最后as_view方法返回了csrf_exempt(view),该方法的作用的就是解除了浏览器请求时的csrf认证,即以后所有的请求方法都不做csrf的认证

总计起来APIView源码的运行过程可以总结为以下几步:

  • 通过路由与视图的对应关系,运行了APIView类中的as_view方法,调用了父类的as_view方法,APIView类中的as_view方法最终解除了请求时的csrf认证
  • 通过调用父类的as_view方法,调用了view方法并返回了APIView类中dispath的运行结果。
  • dispath方法中重新封装了request对象
  • dispatch方法定义了三个认证类
  • dispatch方法通过request.method方法获得浏览器客户端请求的方式,进行视图类方法的调度
  • 最后再在django原生response的基础上,进一步封装成drf的Response

http://www.yayakq.cn/news/68384/

相关文章:

  • 蜘蛛云建网站怎样百度自动点击器
  • 白名单企业珠海网站建设方案优化
  • 越南的网站建设广州sem代运营推广公司
  • 一个网站如何创建多个页面苏州网站开发公司有哪些
  • 北京网站设计外包公司价格广告设计公司公司vi设计
  • 渭南网站建设服务手机网站加百度地图
  • 什么做网站开发客源引流推广app
  • 有后台网站怎么做wordpress全站源码
  • 怎么做钓鱼网站生成网站开发包括软件吗
  • 网站主办者和所有者区别WordPress商用收费吗
  • 石狮网站建设大型 交友 网站 建设 公司
  • 网站建设的流程和内容先做网站再付款
  • 湛江模板建站公司中国建设工程信息网官网查询
  • 网站怎么做适配怎么做公司的网站
  • 做新网站 备案证明交接沈阳企业建站系统模板
  • 怎么做移动端网站计算像素店面设计招聘
  • 工信部会抽查网站么wordpress火车头发布模板
  • 上海门户网站制作公司做网站需要多大的内存
  • 如何做简单网站得物网上商城
  • 公司网站建设维护合同老百姓网免费发布信息
  • 福田网站建设的工具网站下载的软件在哪里找的到
  • 南昌网站设计网站开发长沙建设教育网
  • 网站建设需求策划书会简单的网站建设
  • 网站开展营销的思路和方法什么静态网站容易做
  • 十大拿货网站html5网站优点
  • 天津重型网站建设推荐深圳市中心在哪
  • 查找网站建设历史记录上海做网站多少费用
  • 招聘信息网站开发背景网站域名申请程序
  • 建材公司网站建设方案浙江网城建设有限公司
  • 河南住房和城乡建设厅职称网站网站数据库 数据库空间购买租用