赞
踩
摘要
业务告警 邮件验证 密码找回
邮件告警
例如 访问路由 的次数【请求】
#请求过滤 拦截 到达 路由前 1.process_request(self,request) 执行路由之前被调用,在每个请求上调用,返回None或HttpResponse对象 # 通过路由后 到达视图前 拦截 可以更换视图的参数 2.process_view(self,request,callback,callback_args,callback_kwargs) 调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象 # 返回浏览器之前 3. process_response(self,request,response) 所有响应返回浏览器被调用,在每个请求上调用,返回HttpResponse对象 # 出现异常 4.process_exception(self,request,exception) 当处理过程中抛出异常时调用,返回一个HttpResponse对象 # 不常用 5.process_template_response(self,request,response) 在视图函数执行完毕且试图返回的对象中包含render,方法时被 调用;该方法需要返回实现了render.方法的响应对象
注意:配置为数组,中间件被调用时以
先上到下
再由下到上
的顺序调用
class VisitLimit(MiddlewareMixin): visit_times = {} def process_request(self,request): ip_adress = request.META['REMOTE_ADDR'] path_url = request.path_info print('path :',path_url) if not re.match('^/test',path_url): # 正则表达式匹配 /test 开头的网址 return # 计数 每个都要计算 最好是内存数据库 例如redis 后面学 times = self.visit_times.get(ip_adress,0) # 没有 设置0 print('ip',ip_adress,'已经访问',times) self.visit_times[ip_adress] = times + 1 if times < 5: return return HttpResponse('您已经访问过'+str(times)+'次,访问被禁止') # 若要是从新测试 需要 crtl + c 关掉服务 重新 python manage.py runserver 释放类变量
推送
协议拉取
协议拉取
协议更多详情 : SMTP/IMAP服务
一个动作 一个协议
django在这里充当客户端的功能
要求
settings.py配置 邮件所需服务
mymiddleware.py 创建类和相应的类处理方法 【追溯错误代码行
发送邮件给出错误
】
class ExceptionMW(MiddlewareMixin):
def process_exception(self,request,exception):
print(exception) # 这是错误 : name 'a' is not defined
print(traceback.format_exc()) # 追溯出问题的代码所在位置
mail.send_mail(subject='project error',message=traceback.format_exc(),from_email=settings.EMAIL_HOST_USER,recipient_list=settings.EX_EMAIL)
# EMAIL_HOST_USER from_email='xxx@qq.com'也可以 作用相同
return HttpResponse('--- 对不起 当前网页有点忙 ')
def test_upload(request):
if request.method == 'GET':
a # 自定义一个错误让中间件进行捕获
return render(request,'test_upload.html')
elif request.method == 'POST':
title = request.POST['title']
myfile = request.FILES['myfile']
Content.objects.create(title=title,picture=myfile)
return HttpResponse('上传文件成功!')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。