zoukankan      html  css  js  c++  java
  • django内容总结

    一、django请求的生命周期

      1、django请求生命周期如图所示

        

       2、django本身没有socket,客户端请求先到达wsgi然后再提交给django,而wsgi的本质就是个socket程序

        注释 wsji协议是通过调用wsgiref或uwsgi模块来实现socket的

    二、FBV和CBV

      1、FBV

        function base view, 一个URL路径对应一个视图函数

      2、CBV

        class base view,    一个URL路径对应一个视图下的类

      3、FBV设置方法

        略

      4、CBV设置方法

        1、设置URL格式

          

          注释:对应的类名后必须添加.as_view(),标准格式记住就可以了。

        2、在view中设置class类

          

          注释:设置类时必须先导入一个View模块,然后继承该模块。在该类中先执行父类View中的dispatch方法,然后通过反射判断如果以get请求发送数据自动执行get下的方法,如果以post请求发送数据自动执行post下的方法。

         3、在父类View中的dispatch方法

          

          注释:由于父类中的displaced方法使用了lower()吧字符串转小写的方法所有类下的函数名都是小写。getattr()反射原理意思就是说get请求对应class下的get函数,然后handler()就是执行类下该函数然后返回结果。

         4、自己手动编写一个dispatch方法

          

          注释:由于手动编写直接返回一个"ok"所有不再执行下面的get和post方法

        5、CBV利用dispatch处理数据顺序实现用户登陆验证(相当于添加了个装饰器)

          

          注释:cbv中先执行dispatch再执行get和post最后再执行dispatch然后吧结果发送出去,所有可以在执行get或post之前做一层用户验证是否登陆

             # request.GET      获取GET请求体中的信息
                                    # request.POST    获取POST请求体中的信息    请求方式是由客户端的请求头中的:content-type决定的
                                    # request.body  获取body的信息,GET或POST中的信息是由body中的原始信息转换来的

        6、通过类继承的方法实现5中的需求

          

        7、通过类多继承的方式来实现5中需求

          

          注释:类继承的执行顺序:从左到右

       8、通过装饰器方式来实现5中需求

        装饰器方式1:在每个类下的函数前添加装饰器

          

        装饰器方式2:直接在dispatch函数上添加装饰器

          

        装饰器方式3:直接在类中添加装饰器,用来修饰某个特定的函数

          

          总结:全局设置或者局部设置都要三思而后行

        在服务器端通过装饰器取消csrf_token验证(先导入from django.views.decorators.csrf import csrf_exempt,csrf_protect)

        1.csrf_exempt取消post方式提交的csrf_token验证

            

            注释:只要把该装饰器设置在类下的dispatch函数上才会生效,必须的没理由

        2.csrf_protect取消get方式提交的csrf_token验证

          如上图,略

       9、客户端请求方式( restful规范就是潜规则的意思)

           1、get请求方式:一般是获取数据的时候使用

           2、post请求方式:一般是提交数据的时候使用

           3、put请求方式:一般是全局更新数据的时候使用

           4、patch请求方式:一般是局部更新数据的时候使用

         5、delete请求方式:一般是删除数据的时候使用

         注释:form表单提交数据只支持get和post方式

            ajax提交数据支持get, post, put, patch, delete, head, options, trace等方式

    三、django中间件

      1、如图所示:

        

        注释:django中间键其实就是由类组成,每一个类就是一个中间键。而每一个类里面都可以有五个方法。

      2、方法1(process_request方法) 和方法2(process_response方法):

         

         注释:图一方法直接导入模块然后在模块中创建类进行引用,但是适用于旧版本的Django,新版本的Django建议使用图二方法,直接把        MiddlewareMixin模板中的MiddlewareMixin类方法复制过来就可以了。

        1、process_request    可以有返回值也可以没有返回值

          当有返回值时也就是说有return值时执行的流程,如图所示:

          

          注释:绿色部分为正常流程,而红色部分为当process_request有return返回值的时候就会不走下面的步骤了直接走对应的process_response步骤即直接执行当前中间件和上方中间件的process_response。

        

          利用该知识点设置用户cookie授权验证,如果未授权则url自动跳转至登录页面,但是必须注意的时现在的中间键必须添加在csrf_taken之后否则没有经过csrf就会被拦截返回,一直陷入死循环并且必须设置登录页面的路径可以正常通过。

        2、process_response  必须要有返回值也就是说必须要有return值,否则报错,原理如图所示:

          

          注释:process_reques1 》》process_request2》》process_request3。。。。 view tem 》》。。。》》process_response3》》process_response2》》process_response1。由此可得出在视图函数中返回的response数据可用和用户接受到的response数据不一致那是因为response数据传输到中间键时可能会被修改。比如响应头信息就是在中间键的时候添加上去的。

      3、方法3(process_view方法):

        1、process_view   在成功路由匹配后而在执行view视图函数之前执行的代码,该函数可以有返回值也可没有返回值。

          

        2、执行流程1(没返回值时的执行流程)

          

          注释:先执行process_request然后再执行process_view然后再执行view tem最后执行process_response3

        3、执行流程2(有返回值时的执行流程)

          

      4、方法4(process_exception):

         1、process_exception 该函数是在程序代码出现内部错误返回错误信息时才会执行的函数,该函数必须要有返回值否则无意义,默认是不会被执行的

          

        2、执行流程

          

          注释:先执行process_request然后再执行process_view然后再执行view tem然后再执行process_exception最后执行process_response3

      5、方法5(process_template_response())

        1、process_template_response(self,request,response)     该函数默认不会被执行但是如果返回的结果中有render方法就会被执行且必须有return返回值。

          

      6、Django内部中间键

        

        注释:该中间键的作用就是检测用户传输数据是否有csrf_token键值对,如果有则通过否则403错误

           可以到CsrfViewMiddleware模块中查看中间键的使用方法

          @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。

          @csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

          

  • 相关阅读:
    无法重用Linq2Entity Query
    The Joel Test
    MSBuilder directly instead of default VSComplie with keyborad shotcut 原创
    客户端缓存(Client Cache)
    关于代码重构和UT的一些想法,求砖头
    ExtJS2.0实用简明教程 应用ExtJS
    Perl information,doc,module document and FAQ.
    使用 ConTest 进行多线程单元测试 为什么并行测试很困难以及如何使用 ConTest 辅助测试
    史上最简单的Hibernate入门简介
    汽车常识全面介绍 传动系统
  • 原文地址:https://www.cnblogs.com/xuanan/p/7544999.html
Copyright © 2011-2022 走看看