当前位置: 首页 > news >正文

个人网站备案做论坛网络营销专业是做什么的

个人网站备案做论坛,网络营销专业是做什么的,生产公司简介模板,河南省建设工程人力资源Django——中间件 中间件可以介入 Django 的请求和响应的处理过程,修改 Django 的响应数据。中间件的设计为程序开发者提供了一种无侵入式的开发方式,增强 Django 框架的健壮性。 中间件可以在 Django 处理视图的不同阶段的干预。 Django 框架中原先内…

Django——中间件

中间件可以介入 Django 的请求和响应的处理过程,修改 Django 的响应数据。中间件的设计为程序开发者提供了一种无侵入式的开发方式,增强 Django 框架的健壮性。

中间件可以在 Django 处理视图的不同阶段的干预。

Django 框架中原先内置的一些中间件

MIDDLEWARE = [# 主要对安全性访问处理请求,把 http 请求重定向为 https 请求'django.middleware.security.SecurityMiddleware',# 会话支持'django.contrib.sessions.middleware.SessionMiddleware',# 检查是否允许浏览器访问类型 , 检查 url 是否需要添加 /'django.middleware.common.CommonMiddleware',# 跨站点防御保护'django.middleware.csrf.CsrfViewMiddleware',# 用户认证'django.contrib.auth.middleware.AuthenticationMiddleware',# Cookie 会话支持'django.contrib.messages.middleware.MessageMiddleware',# 点击劫持保护'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
1、项目启动的时候
2、请求进来的时候需要经过中间件之后才能到后续的路由匹配操作
3、响应到浏览器的时候需要经过中间件
1、认证登录
2、统计访问流量
3、拦截请求:可以限制IP的请求频率或者直接封禁IP

中间件的执行顺序

在请求处理之前,中间件根绝配置文件中的配置列表从上往下依次执行;

在请求处理之后,中间件根绝配置文件中的配置列表从下往上依次执行;

1、自定义中间件

定义一个中间件工厂函数,返回一个可以被调用的中间件(闭包)。

中间件的工厂函数必须接收一个可以被调用的 get_response 对象,请求处理。

def simple_middleware(get_response):# 这里编写的代码只在 Django 项目启动的时候被执行def middleware(request):'''request : 和我们写的视图函数接收的request数据一致,都是浏览器的请求数据'''# 这里编写的代码,是在请求处理之前被执行response = get_response(request)# 这里编写的代码,是在请求处理之后被执行return responsereturn middleware

在应用下新建一个 middleware.py 文件

def simple_middleware(get_response):# 这里编写的代码只在 Django 项目启动的时候被执行print('初始化 Django')def middleware(request):'''request : 和我们写的视图函数接收的request数据一致,都是浏览器的请求数据'''# 这里编写的代码,是在请求处理之前被执行print('request 请求被处理之前')response = get_response(request)# 这里编写的代码,是在请求处理之后被执行print('request 请求被处理之后')return responsereturn middleware

定义好中间件之后,需要到配置文件中的 MIDDLEWARE 列表中添加自定义的中间件路径

# 自定义中间件注册
'MiddlewareApp.middleware.simple_middleware',

2、自定义中间件类

自定义中间件类需要继承 MiddlewareMixin

process_request 方法 , 是 Request 预处理函数;这个方法就是在请求处理之前被调用

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponseclass MyMiddleware(MiddlewareMixin):def process_request(self , request):# request : 用户请求的数据# 可以没有返回值:None 中间件就会按照正常的流程执行, 如果配置列表后面还有中间就进入下一个中间件,#               否则则进入 url 请求匹配print('process_request 预处理函数')# 有返回值:HttpResponse 对象,就不执行处理其他的中间件,以及不进行 url 匹配,这里整个请求停止#           将这里返回的 HttpResponse 对象响应给浏览器return HttpResponse('我是 process_request 响应的数据')

process_response 方法;这个方法是在请求处理之后被调用

    def process_response(self , request , response):''':param request: 用户请求的数据:param response: 是视图返回出来的 HttpResponse 对象:return: 必须要有返回值 , 必须返回一个 HttpResponse 对象可以返回视图的 response 对象;也可以自定义 HttpResponse 对象 , 则视图中返回值无效'''print('process_response 执行')# return responsereturn HttpResponse('我是 process_response 响应的数据')

process_view 方法;这个方法在路由匹配之后 , 视图响应之前

    def process_view(self , request , view_func , view_args , view_kwargs):''':param request::param view_func:  请求的 url 匹配到的视图函数:param view_args: 是给视图传递的参数:param view_kwargs: 是给视图传递的参数:return: 可以没有返回值;可以返回值匹配到的视图函数,也可以自定义 HttpResponse 对象 , 则视图函数无效'''print('process_view 执行')# return view_func(request)   # okreturn HttpResponse('我是 process_view 响应的数据')

3、中间件拦截请求

1、限制 IP 访问频率

visit_ip = {}
class IpMiddleware(MiddlewareMixin):'''1、 获取访问的主机IP2、获取到 IP 访问的当前时间3、时间间隔为:40s ;超过15次'''def process_request(self , request):# 获取用户访问的主机 IPip = request.META.get('REMOTE_ADDR')# 获取 IP 访问的当前时间visit_time = time.time()# 数据保存格式{IP:[访问时间,……],IP2:[访问时间,……]……}# 判断 IP 是否在字典中存在 , 如果存在则这个 IP 不是第一次访问# 否则 这个 IP 是第一次访问if ip not in visit_ip:visit_ip[ip] = [visit_time]# ip 在字典中,将访问时间间隔为 大于40s的进行删除时间记录old_time = visit_ip.get(ip)for t in old_time:# 如果列表时间和当前访问时间超过 40s 则清除掉if visit_time - t > 40:old_time.remove(t)# 判断时间列表中记录是否有超过 15 次# 没有超过,进行记录当前的访问时间# 超过,限制当前 IP 访问if len(old_time) < 15:old_time.insert(0 , visit_time)else:return HttpResponse("您别累着了 , 休息一下吧!!!!")

2、禁止 IP 访问

black_ip = {}   # {IP:count}
visit_ip = {}
class IpMiddleware(MiddlewareMixin):'''1、 获取访问的主机IP2、获取到 IP 访问的当前时间3、时间间隔为:40s ;超过 5次4、保存用户的不良行为记录次数 , 超过 3'''def process_request(self , request):# 获取用户访问的主机 IPip = request.META.get('REMOTE_ADDR')## 从数据库中取出ip进行判断(ip) , 数据库中有则表示已经拉黑 , 没有则表示正常# 检查 IP 是否被拉黑black_num = black_ip.get(ip , 0)if black_num > 3:## 将 ip 拉黑保存到数据库中return HttpResponse(status=404)# 获取 IP 访问的当前时间visit_time = time.time()# 数据保存格式{IP:[访问时间,……],IP2:[访问时间,……]……}# 判断 IP 是否在字典中存在 , 如果存在则这个 IP 不是第一次访问# 否则 这个 IP 是第一次访问if ip not in visit_ip:visit_ip[ip] = [visit_time]# ip 在字典中,将访问时间间隔为 大于40s的进行删除时间记录old_time = visit_ip.get(ip)for t in old_time:# 如果列表时间和当前访问时间超过 40s 则清除掉if visit_time - t > 40:old_time.remove(t)# 判断时间列表中记录是否有超过 15 次# 没有超过,进行记录当前的访问时间# 超过,限制当前 IP 访问if len(old_time) < 5:old_time.insert(0 , visit_time)else:# 保存累计不良行为记录次数black_ip[ip] = black_num + 1return HttpResponse("您别累着了 , 休息一下吧!!!!")

文章转载自:
http://adamant.pwrb.cn
http://auricle.pwrb.cn
http://tilburg.pwrb.cn
http://soupfin.pwrb.cn
http://candlestand.pwrb.cn
http://unconsidered.pwrb.cn
http://soaked.pwrb.cn
http://sol.pwrb.cn
http://plutology.pwrb.cn
http://obloquy.pwrb.cn
http://contain.pwrb.cn
http://overwise.pwrb.cn
http://catfoot.pwrb.cn
http://millipede.pwrb.cn
http://sugarplum.pwrb.cn
http://sealery.pwrb.cn
http://insectivorous.pwrb.cn
http://resit.pwrb.cn
http://numbing.pwrb.cn
http://pigeonite.pwrb.cn
http://capeador.pwrb.cn
http://misprice.pwrb.cn
http://electrolyzer.pwrb.cn
http://natalian.pwrb.cn
http://fetlow.pwrb.cn
http://remunerate.pwrb.cn
http://dime.pwrb.cn
http://tremblingly.pwrb.cn
http://enfield.pwrb.cn
http://carnal.pwrb.cn
http://pinxter.pwrb.cn
http://serried.pwrb.cn
http://chaffingly.pwrb.cn
http://peronista.pwrb.cn
http://ichthyornis.pwrb.cn
http://feme.pwrb.cn
http://rnr.pwrb.cn
http://outskirt.pwrb.cn
http://cocurricular.pwrb.cn
http://cavu.pwrb.cn
http://camelot.pwrb.cn
http://pleader.pwrb.cn
http://sarcomatosis.pwrb.cn
http://underwork.pwrb.cn
http://hoar.pwrb.cn
http://abutment.pwrb.cn
http://athenai.pwrb.cn
http://hemorrhage.pwrb.cn
http://lunette.pwrb.cn
http://cove.pwrb.cn
http://gul.pwrb.cn
http://accreditation.pwrb.cn
http://parsec.pwrb.cn
http://lightplane.pwrb.cn
http://microsample.pwrb.cn
http://booklearned.pwrb.cn
http://leeriness.pwrb.cn
http://arming.pwrb.cn
http://chigetai.pwrb.cn
http://spring.pwrb.cn
http://snackette.pwrb.cn
http://bicephalous.pwrb.cn
http://macao.pwrb.cn
http://housemate.pwrb.cn
http://catalan.pwrb.cn
http://forcer.pwrb.cn
http://beld.pwrb.cn
http://queenless.pwrb.cn
http://bulldog.pwrb.cn
http://diriment.pwrb.cn
http://accelerant.pwrb.cn
http://pyophthalmia.pwrb.cn
http://germiculture.pwrb.cn
http://interdictory.pwrb.cn
http://ignatius.pwrb.cn
http://cheerfulness.pwrb.cn
http://broederbond.pwrb.cn
http://psychon.pwrb.cn
http://yalung.pwrb.cn
http://dripstone.pwrb.cn
http://stiffener.pwrb.cn
http://molestation.pwrb.cn
http://protasis.pwrb.cn
http://tritish.pwrb.cn
http://fanegada.pwrb.cn
http://ic.pwrb.cn
http://phalanger.pwrb.cn
http://osteotome.pwrb.cn
http://plasmodesm.pwrb.cn
http://nidicolous.pwrb.cn
http://trachea.pwrb.cn
http://stagflation.pwrb.cn
http://colonize.pwrb.cn
http://bookmark.pwrb.cn
http://transsexual.pwrb.cn
http://archaism.pwrb.cn
http://only.pwrb.cn
http://piperin.pwrb.cn
http://philogynous.pwrb.cn
http://photic.pwrb.cn
http://www.dt0577.cn/news/62446.html

相关文章:

  • 网站开发做什么的深圳全网营销型网站
  • wordpress自动分类插件优化大师电脑版
  • 广告联盟排行seo企业推广案例
  • 教育机构网站建设方案书seo搜索引擎是什么
  • 网站建设拍金手指谷哥14网站优化公司怎么选
  • 我wordpress top主题广州网站快速排名优化
  • 东莞企业年检哪个网站做郑州疫情最新动态
  • 做网站前应该怎么处理网络推广和网络营销的区别
  • 做私活的网站青岛网络优化哪家专业
  • 视频logo免费生成网站软件在线一键建站系统
  • 网站建设企业属于什么类型的公司谷歌google play下载
  • 12306网站学生做百度网址收录入口
  • 重庆是哪个省属于哪个省温州seo团队
  • 铁岭市网站建设公司免费发软文的网站
  • 如何做网站对比推广品牌的策划方案
  • 一天一元网站建设百度竞价排名软件
  • 京伦网站建设免费舆情网站下载大全最新版
  • 淘宝上做的网站百度精准搜索
  • 做模型网站赚钱么seo综合查询系统
  • 中华人民共和国建设部网站官网东莞网络推广哪家公司奿
  • 旅游网站开发指导百度手机助手应用商店
  • 迅雷之家是迅雷做的网站吗百度电话客服
  • 做设计在哪个网站上找高清图营销型网站建设费用
  • 信阳做网站杭州seo排名公司
  • 石家庄网站建设推广报价seo排名的公司
  • wordpress导航分类插件谷歌seo视频教程
  • 顺德建设幼儿院报名网站网推公司
  • 北京做网站制作的公司哪家好手机网络优化软件
  • 网站软文设计如何获取永久免费域名
  • 网站制作 公开课资源网站优化排名软件