django中间件
''' django中间件是django的门户 1.请求来的时候需要先经过中间件才能达到真正的django后端 2.响应走的时候也需要经过中间件 djangp自带七个中间件 ''' MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',------session与之切切相关 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] # django支持程序员自定义中间件并且暴露给程序员五个可以自定义的方法 1.必须要掌握的 process_request process_response 2.了解即可 process_view process_template_response process_exception
如何自定义中间件
''' 1.在项目名或者应用名下创建一个任意名称的文件夹 2.在该文件内创建一个任意名称的py文件 3.在该py文件内需要数学类(这个类必须继承MiddlewareMixin) -然后在这个类里面就可以自定义五个方法(这五个方法用几个写几个,不需要全写) 4.需要将类的路径以字符串的形式注册到配置文件中才能生效 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',------session与之切切相关 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', '你的自定义中间件' ] ''' 1.必须要掌握的 # process_request ---- 请求来的时候 1.请求来的时候需要经过每一个中间件里面的process_request方法 -结果的顺序是按照配置文件中注册的文件顺序从上到下依次执行 2.如果中间件里面没有定义该方法,那么就直接跳过执行下一个中间件 3.如果该方法返回了HttpResponse对象那么请求不再继续往后执行,而是直接原路返回 -功能类似于校验失败,不允许访问 总结:process_request方法就是用来做全局相关的所有限制功能 # process_response ---- 就是django后端返回给浏览器的内容 1.响应走的时候需要经过每一个中间件里面的process_response方法 -该方法有两个额外的参数request和response 2.该方法必须返回一个HttpResponse对象 1.默认返回的就是response 2.你也可以自定义返回 3.顺序是按照配置文件中注册了的中间件从下往上的顺序 # 问:如果在第一个process_request方法就已经返回了HttpResponse对象,那么响应走的时候是经过所有的中间件里面的process_response还是有其他的情况 答:会直接走同级别的process_response方法返回,接下来的中间件就不执行了 2.了解即可 # process_view 路由匹配成功之后执行视图函数之前,会自动执行中间件里面的该方法 顺序是配置文件中的注册的中间件从上往下依次执行 # process_template_response 返回的HttpResponse对象有render属性时候才会触发 顺序是按照配置文件中注册的中间件从下往上依次经过 # process_exception 当视图函数中出现异常的情况下触发 顺序也是从下往上的顺序
---------------------------------------------------------------------------------------------->>>注意看request和response的执行顺序
csrf跨站请求伪造
''' 与钓鱼网站有关 我搭建一个跟正规网站一模一样的界面 用户不小心进入到了我们的网站,用户给某人打钱 打钱的操作的确是提交给了正规网站,用户的钱也确确实实减少了 但是打钱的目标账户被改变了,变成了别的用户 内部本质: 我们在钓鱼网站的页面,针对对方账户只给用户提供一个没有name属性的普通input框 然后我们在内部隐藏一个已经写好的name和value的input框 如何规避: csrf跨站伪造校验 网站在给用户返回一个具有提交数据功能的页面的时候会给这个页面加一个唯一标识 当这个页面超后端发送post请求的时候,我们后端会先校验这个唯一标识,如果唯一标识不对,就会直接拒绝(403)如果成功,就正常执行 '''
如何符合校验
# form表单如何符合校验 在form表单中写入{% csrf_token %}
csrf相关装饰器
''' 1.网站整体都不校验csrf,就单单几个视图函数需要校验 2.网站整体都需要csrf校验,就单单几个试图函数不需要校验 ''' 装饰器导入:from django.views.decorators.csrf import csrf_protect,csrf_exempt csrf_protect:需要校验 csrf_exempt:不需要校验