Django的请求过程

当客户端访问服务器,进行了一个http请求,也就是用户访问了一个url时,发生了如下的事情:

如果是以GET方法请求(请求时要用到的数据放在url路径里),Django会从url中取出访问时所需的数据,可以通过request.GET字典操作

如果以POST方法请求(请求时要用到的数据放在请求体里),Django会从请求体里取出访问时所需的数据,可以通过request.POST字典操作

request.POST虽然是一个字典,但是其本源是request.body,reqeust.body是原生的请求体,是字符串,request.POST是在request.body的基础上处理得到的

经过上述操作之后,Django再通过url正则进行匹配,匹配顺序从上到下,第一次匹配成功后即执行对应视图函数,就不再匹配,所以写url时要注意写$符号,以免出现后续问题

上述的Http请求,被WSGI封装,传给了视图函数中的那个必须要有的参数:request

这种路由对应视图函数的模式成为FBV模式

还有一种路由对应类的模式称为CBV模式,在views的类中定义一些方法,在类中Django为我们提供了get和post两个方法名,Django去找http请求头中的请求方法,如果以GET方式请求,则自动触发类中的get方法,POST方式触发post方法,但前提是views中的类要继承django.views中的View类才可以这样使用

而且在写url时,要在类后面加as_view()方法,例如:views.类名.as_view()

关于触发类中的get与post方法,具体流程如下:CBV中的类要继承views.View类,而View里有一个dispatch方法,此方法的功能是判断请求字符串中的method是GET还是POST,从而去调用views.py中的类对应的方法。由于每次执行一次CBV形式的从路由到类的映射,就会以反射的方式调用一次这个dispatch方法,所以在views.py中的子类里重写父类View中的dispatch方法,就可以实现一些额外的每一次操作都需要有的功能,比如每次登录都要验证等等

转载于:https://www.cnblogs.com/zhangzhaoyu/p/9234381.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值