$Django 中间件 csrf
-中间件是什么?请求和响应之间的一道屏障
-中间件作用:控制请求和响应
-django中内置几个中间件
process_request(self,request)
process_view(self, request, callback, callback_args, callback_kwargs)
process_template_response(self,request,response)
process_exception(self, request, exception)
process_response(self, request, response)
我是 request2
我是 执行视图函数之前 1
我是 执行视图函数之前 2
我是视图函数
我是 template 2
我是 template 1
我是 异常2
我是 异常1
我是 response2
我是 response1



-自定义中间件
-1.from django.utils.deprecation import MiddlewareMixin
class MyMiddleware1(MiddlewareMixin):
def process_request(self, request):
print('MyMiddleware---->1---->process_request')
# 返回HttpRspons对象,直接返回,走自己的process_response
# 返回None的时候,继续往下走
# return HttpResponse('i am middle--1')
return None
def process_response(self, request, response):
print('MyMiddleware--->1---->process_response')
return response #这里必须返回HTTPRESPONSE对象 对视图函数的返回值response的一个操作,可以丢弃等等操作
-2.在setting中注册,是有顺序的,
MIDDLEWARE = [
'app01.mymiddelware.MyMiddleware1',
]
-中间件执行顺序:
-process_request,从上往下执行
-如果retrun HttpResponse的对象,直接返回了
-如果retrun None ,继续往下走
-process_response,从下往上执行
-必须要retrun Httpresponse的对象
csrf:跨站请求伪造
比如:转账请求:transfer?to=lqz&count=1000
-是什么?攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的
-如何防范:
-通过refer
-加一个随机字符串校验(加载请求的路径里,加载请求体中)
-在请求头中加字符串校验
django中的应用:
-中间件csrf不注释掉
-以后再发post请求,必须携带那个随机字符串到服务端
-form表单形式:
<form action="" method="post">
{% csrf_token %}
<input type="text" name="name">
<input type="text" name="pwd">
<input type="submit" value="提交">
</form>
-ajax提交
data: {
'name': $('[name="name"]').val(),
'pwd': $('[name="pwd"]').val(),
//'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val()
'csrfmiddlewaretoken': '{{ csrf_token }}'
},
csrf:局部禁用,局部使用
-用装饰器:
-局部禁用,全局得使用
@csrf_exempt
def csrf_disable(request):
print(request.POST)
return HttpResponse('ok')
-局部使用,全局得禁用
@csrf_protect
def csrf_disable(request):
print(request.POST)
return HttpResponse('ok')
-cbv-->只能加在dispatch方法或者类上面
-局部禁用,全局得使用
-局部使用,全局得禁用
from django.views import View
from django.utils.decorators import method_decorator
#####################################################
@method_decorator(csrf_protect,name='dispatch')
class Csrf_disable(View):
# @method_decorator(csrf_protect)
def dispatch(self, request, *args, **kwargs):
ret=super().dispatch(request, *args, **kwargs)
return ret
def get(self,request):
return HttpResponse('ok')
return HttpResponse('post---ok')
-先导入:
-1 可以在方法上加装饰器:
@method_decorator(login_auth)
-2 可以在类上加
@method_decorator(login_auth,name='post')
@method_decorator(login_auth,name='get')
-3 可以加在dishpatch方法上
@method_decorator(login_auth)
一旦加在dishpatch,说明,所有方法都加了装饰器
from django.utils.deprecation import MiddlewareMixin
from django.utils.decorators import method_decorator
from django.shortcuts import render,HttpResponse class MyMiddleware(MiddlewareMixin):
def process_request(self,request):
print('我是 request1')
# return HttpResponse(1) # 我是 request0 我是 response0
def process_view(self, request, callback, callback_args, callback_kwargs):
print ("我是 执行视图函数之前 1")
#有异常才执行该函数,每异常不管他,必须返回Httpresponse对象(有异常 显示我的信息)
def process_exception(self, request, exception):
print ("我是 异常1")
return HttpResponse('出错了兄弟1')
# 方法对视图函数返回值有要求,必须是一个含有render方法类的对象,才会执行此方法
# 1.视图函数 必须返回 一个类(有render方法 返回Httprespons对象)
# 2.这里要返回一个 Httpresponse对象
def process_template_response(self,request,response):
print('我是 template 1')
return HttpResponse('我是 template1')
def process_response(self,request,response):
print('我是 response1')
return response
class MyMiddleware1(MiddlewareMixin):
def process_request(self,request):
print('我是 request2')
def process_view(self, request, callback, callback_args, callback_kwargs):
print ("我是 执行视图函数之前 2")
def process_exception(self, request, exception):
print ("我是 异常2")
def process_template_response(self, request, response):
print ('我是 template 2')
return HttpResponse ('我是 template2')
def process_response(self, request, response):
print ('我是 response2')
return response ###视图函数
from django.shortcuts import render,HttpResponse # Create your views here.
class GG():
def render(self):
return HttpResponse('template')
def aaa(request):
if request.method=='GET':
print('我是视图函数get')
return GG()
elif request.method=='POST':
print(request.POST,type(request.POST),'我是视图函数post')
return HttpResponse('ok')
随机推荐
- React 记录(2)
入门教程:https://www.reactjscn.com/tutorial/tutorial.html 慢慢学习:对照教程文档,逐句猜解,截图 React官网:https://reactjs.or ...
- js方法参数中含有单引号双引号的处理
最近在做项目时,遇到一个问题.当在js脚本中,拼接生成一个tr,然后添加到一个表格里. //假定testval是从后台传过来的数据 var testval = "含有'半角单引号的字符串&q ...
- ssm的架构及整合说明
SSM,即 SpringMVC.Spring 与 MyBatis 三个框架 它们在三层架构中所处的位置是不同的,即它们在三层架构中的功能各不相同,各司其职 SpringMVC:作为 View 层的实现 ...
- python爬虫慕课基础2
实战演练:爬取百度百科1000个页面的数据 对于新手来说,可以把spider_main.py代码中的try和except去掉,运行报错就会在控制台出现,根据错误去调试自己的程序 发现以下错误: req ...
- awk词频统计
2018-01-03@中关村 有文本 a.log 如下,请做词频统计,统计出每个单词出现的频率并倒序排序. The Zen of Python, by Tim Peters Beautiful is ...
- Chrome及Firefox插件
注:以下所有工具都是笔者自己目前使用的 密码管理工具 lastpass 护眼工具 眼睛护航 待续……
- 理解JS的执行环境
执行环境(Execution context,EC)或执行上下文,是JS中一个极为重要的概念 EC的组成 当JavaScript代码执行的时候,会进入不同的执行上下文,这些执行上下文会构成了一个执行上 ...
- CF 1060E. Sergey and Subway
题目链接 题意:给你一棵树,然后连接两个有公共邻居的点,问你连完后,任意两点的距离之和. 一开始看这种题,还不怎么会做,借鉴了这位大佬的博客,get到了新技能,当我们求树上任意俩点的距离之时,可以转化 ...
- VMWare14 安装Mac OS系统(图解)
★ 背景 瞅了瞅自己干瘪的钱包,没忍心入手期待已久的 macPro,只好在虚拟机里玩一下 mac好了,等以后钱包傲气的时候再来个真实的. 安装环境: windows10 VMWare14.2 一.准备 ...
- jstl-----之<set>标签
<table id="attachtab" border="0" cellpadding="0" cellspacing=" ...