一、中间件csrf


'''
# 可以对请求、响应...等功能完成过滤
# 自定义中间件
# 1. 在某一应用下(eg:app),建立某一py文件(eg: mymiddleware.py)
# 2. 在文件中自定义类,继承django.utils.deprecation下的MiddlewareMixin类
# 3. 实现要过滤的方法,完成具体的过滤条件
'''
from django.utils.deprecation import MiddlewareMixin
class MyMiddleware1(MiddlewareMixin):
def process_request(self, request):
''' 请求处理
:param request:请求对象
:return: 一般没有返回值,但可以返回HttpResponse对象
'''
def process_view(self, request, callback, callback_args, callback_kwargs):
''' 视图函数预处理
:param request: 请求对象
:param callback: 路由返回的视图函数地址
:param callback_args: 视图函数的位置参数(元组)
:param callback_kwargs: 视图函数的关键字参数(字典)
:return: 一般没有返回值,但可以返回HttpResponse对象
'''
def process_exception(self, request, exception):
''' 视图函数异常处理
:param request: 请求对象
:param exception: 视图函数的异常对象
:return: 一般没有返回值,但可以返回HttpResponse对象
'''
def process_template_response(self, request, response):
''' 视图函数返回值为拥有render方法的对象,该方法会执行
:param request: 请求对象
:param response: 响应对象
:return: 一定要返回response
'''
return response
def process_response(self, request, response):
''' 响应处理
:param request: 请求对象
:param response: 响应对象
:return: 一定要返回response
'''
return response
class MyMiddleware2(MiddlewareMixin):
def process_request(self, request):
pass
二、使用自定义中间件
MIDDLEWARE = [
...
'app.testmiddleware.MyMiddleware1',
'app.testmiddleware.MyMiddleware2'
]
三、form完成csrf认证
<form action="" method="post">
{% csrf_token %}
</form>
四、ajax完成csrf认证
<script src="/static/jquery-3.3.1.js"></script>
<script src="/static/jquery.cookie.js"></script>
<script>
token = $.cookie('csrftoken');
$.ajax({
url: '/',
type: 'post',
headers:{'X-CSRFToken': token},
data: {
msg: '请求数据'
},
success: function (data) {
console.log(data)
}
})
</script>