Django 的View 是如何处理请求的

目录

一:预备知识

二:class-based view 的处理流程

(一):as_view 的逻辑

(二):请求到达之后的完整逻辑


一:预备知识

知道function view 和class -based view :了解如何定义URL,把请求转发到对应的View 上,也知道了如何在View 中获取请求数据,然后操作Model 层拿到数据,最后渲染模板并返回。

当Django 接受一个请求之后(严格来说是HTTP 请求,只不过HTTP 请求会被Django 转化为request 对象),请求会先经过所有middleware 的process request 方法,然后解析URL,接着根据配置的URL 和飞fiew 的映射,把request 对象传递到View 中。关于middleware 的流程,

这里的View 有两类,就是我们前面讲到的“nction view 和class-based view 。function view 的处理逻辑比较好理解,就是简单的函数,流程就是函数的执行流程,只是第一个参数是request 对象。class-based view 的流程需要说明一下。

二:class-based view 的处理流程

class-based view 对外暴露的接口其实是as_view 。

(一):as_view 的逻辑

as_view 其实只做了一件事,那就是返回一个闭包。这个闭包会在同ango 解析完请求之后调用,而闭包中的逻辑是这样的。
---------给class (也就是我们定义的View 类)赋值一一-request 、args 和kwargs 。
---------根据HTTP 方法分发请求。比如HTTP GET 请求会i周用class.get 方法, POST 请求会调用class.post 方法。

(二):请求到达之后的完整逻辑

我们知道as_view 做了什么事,也知道了as _view 返回的闭包是如何处理后续请求的。假设现在有一个GET 请求,我们来具体看一下ListView 的流程,其他的View 大同小异。

(1)请求到达之后,首先会调用dispatch 进行分发。
(2)接着会调用get 方法。

      ①在GET 请求中,首先会调用get _queryset 方法,拿到数据源。
      ②接着调用get_context _data 方法, 拿到需要渲染到模板中的数据。

               I)在get _context_data 中,首先会调用get_paginate_by 拿到每页数据。

              2)接着调用get_context_object_name 拿到要渲染到模板中的这个queryset名称

              3)然后调用paginate_queryset 进行分页处理。

              4)最后拿到的数据转为 dict 井返回。

     ③调用render to_respo口se 谊染数据到页面中。

               l)在render_to_re sponse 中调用get _ tempalte_names 拿到模板名。
              2)然后把request 、context 、template_name 等传递到模板中。

Django的FBV与CBV的比较杂谈

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值