中间件的定义
中间件使用
编写中间件:
django.utils.deprecation.MiddlewareMixin
类process_request(self,request)
:
process_view(self,request,callback,callback_args,callback_kwargs)
:
process_response(self,request,response)
:
process_exception(self,request,exception)
:
process_template_response(self,request,response)
:
注册中间件:
在settings.py文件中进行注册
file:settings.py
MIDDLEWARE= [
···
'MyMiddleWare',
]
>deprecation import MiddlewareMixin
import re
class MWare(MiddlewareMixin):
count_dict = {} 创建用于统计次数的字典
def process_request(self,request):
request_ip = request.META['REMOTE_ADDR'] 获取请求IP
request_url = request.path_info 获取请求URL
if re.match(r'^/test',request_url): 匹配请求是否以/test开头
times = self.count_dict.get(request_ip,0) 查询当前IP的请求次数,默认为0
self.count_dict[request_ip]= times + 1 请求次数 + 1
if times < 5: 如果请求次数<5次,请求正常通过
return
else: 如果请求次数>5次,则返回HttpResponse,阻止请求
return HttpResponse("访问次数超过5次,请求失败")
else: 如果不是以/test开头则直接正常通过
return
注册中间件
file:settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'middleware.mymiddleware.MWare',
]
附django请求流程图
CSRF - 跨站伪造请求攻击
django采用比对 ‘暗号’ 机制防范攻击
原理:
配置步骤:
在settings.py文件中确认MIDDLEWARE中django.middleware.csrf.CsrfViewMiddleware是否打开
在模板中的form标签下添加如下标签{% csrf_token %}
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CSRF-TEXT</title>
</head>
<body>
<form action="/test_csrf" method="post">
{% csrf_token %}
<input type="text" name="test">
<input type="submit" value="提交" name="key">
</form>
</body>
</html>
特殊说明(局部开放csrf):
如果某个视图不需要django进行csrf保护,可以用装饰器关闭对此视图的检查
样例:
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt 使用装饰器关闭csrf对此试图的检查
def my_view(request):
return HttpResponse('hello world')
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!