zoukankan      html  css  js  c++  java
  • day71---日考

    day71日考题

    考题

    """
    今日考题
    1.什么是django中间件,它的作用是什么,如何自定义中间件,里面有哪些用户可以自定义的方法,这些方法有何特点
    2.基于django中间件的功能设计,你有啥感悟和心得
    3.什么是跨站请求伪造,你可以用一个具体的实例描述一下,django中如何防止及通过跨站请求伪造校验(form表单与ajax)
    4.跨站请求伪造相关的装饰器有哪些,应用在FBV与CBV上的有什么异同
    """
    

    1.什么是django中间件,它的作用是什么,如何自定义中间件,里面有哪些用户可以自定义的方法,这些方法有何特点。

    django中间件是用来处理框架中的请求和响应的钩子,即可以在执行视图函数之前或者之后做一些额外的操作。
    
    # 自定义中间件的步骤
    (1)在项目或者应用的下面创建名称为任意名字的文件夹,如‘mymiddleware’,
    (2)在该文件夹下创建任意名字的py文件,如‘auths.py’,
    (3)在py文件中书写类,所书写的类必须继承于`MiddlewareMixin`,
    (4)将其注册到settings.py中的MIDDLEWARE列表中,如:
    MIDDLEWARE=[
        ...,
        # 自定义中间件
        'app01.mymiddleware.auths.Login',
        'app01.mymiddleware.auths.Resgister',
    ]
    
    # process_request(self,request)
    (1)process_request在执行视图函数之前执行;
    (2)有多个中间件时,按照MIDDLEWARE中的注册顺序依次执行(自上而下);
    (3)如果某个中间件没有该方法则跳过,继续执行下一个中间件;
    (4)process_request的返回值可以是None,也可以是HttpResponse对象,如果是None,继续处理django请求,执行下一个中间件的process_request,如果是HttpResponse对象,原路返回;
    (5)不同中间件之间传递的request对象是一样的(除非你人为修改了)
    
    #process_response(self,request,response)
    (1)process_resposne在执行视图函数之后执行;
    (2)有多个中间件时,按照MIDDLEWARE中的注册顺序倒序执行(自下而上);
    (3)如果某个中间件没有该方法则跳过,继续执行下一个中间件;
    (4)process_response的response参数是视图函数返回的HttpResponse对象
    
    
    注意:当process_request返回一个HttpResponse对象后会直接走同级别的process_response方法,不会执行其他的process_response。但是在flask框架中,会将所有的类似django中的process_response方法都走一遍
    
    #process_view
    在路由匹配成功之后,执行视图函数之前执行
    执行顺序是,按照MIDDLEWARE中的注册顺序依次执行(自上而下)
    
    #process_exception
    在执行视图函数过程抛出了异常执行
    执行顺序是,按照MIDDLEWARE中的注册顺序倒序执行(自下而上);
    
    #process_template_response
    视图函数返回的HttpResponse对象具有render属性触发,用的不多
    执行顺序是,按照MIDDLEWARE中的注册顺序倒序执行(自下而上);
    

    2.基于django中间件的功能设计,你有啥感悟和心得

    得出一个重要的编程思想:模块的动态导入+反射+多态(鸭子类型)
    django中间件的增加和取消使用配置文件,在配置文件中增加和注释就可以实现,这种可插拔式了编程思想极大的实现了功能之间的解耦合性。
    它内部采用模块动态导入的方式,将字符串的路径解析成模块导入是实现这种编程思想的基础。
    另外,反射和面向对象的多态(鸭子类型)在这里面也发挥这重要作用。
    以后,我们在项目中如果遇到类似的设计,比如功能性模块的设计,可以简介这种编程思想,方便用户模块的使用。
    
    
    NOFITY_LIST = [
        'notify.ali_pay.AliPay',
        'notify.qq_pay.QQPay',
        'notify.wechat_pay.WeChatPay'
    ]
    
    for path_str in settings.NOFITY_LIST:
        module_path,class_name = path_str.rsplit('.',maxsplit=1)
        module = importlib.import_module(module_path)  # from notify import ali_pay
        if hasattr(module,class_name):  # 反射
            cls=getattr(module,class_name) 
            obj = cls() #实例化一个对象
            obj.pay_all()
    

    3.什么是跨站请求伪造,你可以用一个具体的实例描述一下,django中如何防止及通过跨站请求伪造校验(form表单与ajax)

    服务端给每一个需要用户提交数据的页面一个唯一标识
    当该页面提交到后端时需要校验本次提交是否携带这唯一标识,
    如果携带且正确则正常进入;否则校验失败不允许访问403禁止。
    比如钓鱼网站的跨站伪造请求,就是利用早期互联网在这方面的漏洞而出现的不法行为。
    
    # 表单中csrf跨站请求伪造校验
    <form actio="" method="post" novalidate>
    	{% csrf_token %}
    </form>
    
    # ajax处理csrf跨站请求伪造校验
    <button class="btn btn-sm btn-success" type="submit" id="d1">提交<button>
    
    <script>
    	let $btnEle = $('#d1');
        $btnEle.on('click',function(){
            $.ajax({
               url:'', #不写默认朝当前地址提交
               type:'post',
               data:{'username':'jason_dsb','password':'dbj66'},
               sucess:function(args){  #异步回调函数机制
                   
               }
            });
        })
    </script>
    
    # 方法1
    data中添加
    data:{'username':'jason_dsb','password':'dbj66','csrfmiddlewaretoken':$('[name=csrfmiddletoken]').val()},
        
    # 方法2
    data:{'username':'jason_dsb','password':'dbj66','csrfmiddlewaretoken':'{{ csrf_token }}'},
        
    # 方法3
    导入django官方处理csrf的js文件
    导入路径:‘/static/js/mysetup.js’
    <script src="{% static 'js/mysetup.js' %}"></script>
    

    4.跨站请求伪造相关的装饰器有哪些,应用在FBV与CBV上的有什么异同

    from django.views.decorators.csrf import csrf_protect csrf_exempt
    csrf_protect	加保护
    csrf_exempt		移除保护
    
    FBV时直接加载视图函数上面
    CBV时,csrf_protect三种加装饰器的方法都可以;而csrf_exempt只能加在dispatch上
    
  • 相关阅读:
    自学Linux命令的四种方法
    linux命令学习
    设计师提高效率必备的10大在线工具
    基于CNN网络的汉字图像字体识别及其原理
    字库的产生
    开篇
    智能建筑系统集成发展目标——节能建筑
    建筑节能案例解析:拜尔的生态幼儿园
    能源管理系统(Synchro EMS)技术架构
    能源管理系统(Synchro EMS)
  • 原文地址:https://www.cnblogs.com/surpass123/p/13070265.html
Copyright © 2011-2022 走看看