首页 > 其他分享 >中间件

中间件

时间:2024-05-15 20:21:20浏览次数:12  
标签:return process 中间件 request print view

中间件

中间件的应用场景

​ 1、做IP访问频率限制

​ 某些IP访问服务器的频率过高,进行拦截,比如限制每分钟不能超过20次。

​ 2、URL访问过滤

​ 如果用户访问的是login视图(放过)

​ 如果访问其他视图,需要检测是不是有session认证,已经有了放行,没有返回login,这样就省得在多个视图函数上写装饰器了!

Django中间件流程

1 在应用中创建一个py文件,比如 mymiddleware.py

2 py文件中写如下内容

from django.shortcuts import redirect,HttpResponse,render
from django.utils.deprecation import MiddlewareMixin  # 继承这个父类

# 登录认证中间件
class LoginAuth(MiddlewareMixin): 
	# 白名单
	white_list = ['/login/', '/register/']

	# 对请求处理用process_request, 如果请求通过了处理,就return None,如果没有通过直接return HttpResponse对象
	def process_request(self,request):

		current_path = request.path
		if current_path not in self.white_list:
			status = request.session.get('is_login')
			if not status:
				# return HttpResponse('ok')  #如果return 的是一个HttpResponse对象,那么中间件执行到这里,直接返回
				return redirect('login')

		print('请求它来啦!!!')

3 在settings配置文件中加上我们定义的类的路径

MIDDLEWARE = [

    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',  # 封装session功能的 ,request.session['xx'] ='oo'
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',

    # 尽量将自己定义的中间件放到最后
    'app01.mymiddleware.LoginAuth',
]

只有定义了process_request方法的中间件才会对请求做处理,不然不会执行这个中间件

1607049196554

process_request

from django.shortcuts import redirect,HttpResponse,render
from django.utils.deprecation import MiddlewareMixin  # 继承这个父类

# 登录认证中间件
class LoginAuth(MiddlewareMixin): 
	# 白名单
	white_list = ['/login/', '/register/']

	# 对请求处理用process_request, 如果请求通过了处理,就return None,如果没有通过直接return HttpResponse对象
	def process_request(self,request):

		current_path = request.path
		if current_path not in self.white_list:
			status = request.session.get('is_login')
			if not status:
				# return HttpResponse('ok')  #如果return 的是一个HttpResponse对象,那么中间件执行到这里,直接返回
				return redirect('login')

		print('请求它来啦!!!')

process_reponse

process_view

多做参数处理

process_exception

多做异常处理

class Md1(MiddlewareMixin):
	def process_request(self,request):
		print('Md1-process_request')
		# return HttpResponse('xxxx')


	def process_view(self, request, view_func, view_args, view_kwargs):
		print('md1--process_view')
		print(view_func, view_args, view_kwargs)
		# return HttpResponse('not ok')

		#<function index at 0x00000279D59709D8> ('100',) {}

	def process_response(self,request,response):

		print('Md1-process_response')
		return response


	def process_exception(self, request, exception):
		print(exception,type(exception))
		print('md1-process_exception')
		# xxxxxxxxxxx <class 'ValueError'>
		# 统一做异常处理
		if isinstance(exception, ValueError):
			return HttpResponse('视图函数报错啦!!!!',status=500)





class Md2(MiddlewareMixin):

	def process_request(self, request):
		print('Md2-process_request')

	def process_view(self, request, view_func, view_args, view_kwargs):
		print('md2--process_view')


	def process_response(self,request,response):
		print('Md2-process_response')
		return response

	def process_exception(self, request, exception):

		print('md2-process_exception')

标签:return,process,中间件,request,print,view
From: https://www.cnblogs.com/wbcde116/p/18194621

相关文章

  • 【django学习-25】登录及使用中间件进行登录校验
    1.登录功能实现1.1:管理员表fromdjango.dbimportmodelsclassAdmin(models.Model):"""管理员"""username=models.CharField(verbose_name="用户名",max_length=32)password=models.CharField(verbose_name="密码......
  • caddy自动https服务器中间件
    Caddy是一个功能丰富的开源Web服务器,具有自动HTTPS的能力。它被设计为易于使用,并具有现代化的功能和配置选项。以下是Caddy的一些主要特点:自动HTTPS: Caddy可以自动为您的网站提供HTTPS支持,而不需要复杂的配置。它使用Let'sEncrypt来自动获取和管理SSL/TLS证书......
  • GO 中间件方式执行额外任务
    packagemainimport( "database/sql" "fmt" "mylog" "time")typeMiddlewarestruct{}/*如遇错误,执行额外任务*/func(m*Middleware)Println(vinterface{}){ iferr,ok:=v.(error);ok{ mylog.Println("执行额外任务:&......
  • NET6 自定义授权中间件
    AuthorizationWithCustMiddleware///<summary>///自定义授权中间件类:使用身份验证中间件存储的身份信息来进行权限验证///一定要先启用身份验证中间件(app.UseAuthentication()),它会验证请求中的身份信息,并将身份信息存储在HttpContext.User属性中///如果没有启用身份......
  • 深入理解Django:中间件与信号处理的艺术
    title:深入理解Django:中间件与信号处理的艺术date:2024/5/918:41:21updated:2024/5/918:41:21categories:后端开发tags:Django中间件信号异步性能缓存多语言引言在当今的Web开发领域,Django以其强大的功能、简洁的代码结构和高度的可扩展性,已成为众多开......
  • 常用的中间件
    中间件是指位于操作系统和应用程序之间的软件层。它们提供了一种通信机制,使不同的应用程序或系统能够相互交互和协作。中间件可以按照不同的标准进行分类。常见的中间件分类包括:1.消息队列中间件:用于在应用程序之间进行异步消息传递。消息队列中间件包括RabbitMQ、ApacheKafka......
  • 中间件 MQ
    一、什么是mq?MQ全称MessageQueue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。二、mq的优缺点?优点:1.应用解耦:降低系统之间的耦合,提高系统的可维护性。 2.异步提速:可以系统的吞吐量。 3.削峰填谷:可以提高系统的稳定性。 ......
  • webapi添加添加websocket中间件
    添加位置我按照MSDN的例子添加了一个复述客户端响应的中间件。需要注意的时,中间件采用那种方式添加,添加在哪。哪种方式我选择创建一条管道分支,只要时ws的连接请求,就转到这个分支因此,我们需要使用的是MapWhen()来创建管道分支。添加在哪要注意授权的问题,所以应该添加到授权......
  • webapi中间件没有使用终结点中间件时的注意事项
    最小webapi默认的中间件配置是这样的app.UseHttpsRedirection();app.UseAuthorization();app.MapControllers();app.Run();最小webapi没有使用app.UseRouting()和app.UseEndpoints。这种情况下我们添加的所有中间件其实都是位于终结点路由中间件EndpointRoutingMiddleware......
  • 数据库中间件-He3Proxy
    什么是数据库中间件?随着互联网行业的蓬勃发展,业务访问量、数据量激增,传统数据库的单库、大表已成为业务发展的瓶颈,进而衍生出数据库主从实例、分库分表等方案,为减少数据库层变动对业务开发带来的复杂性,一种连接应用与数据库桥梁的工具孕育而生,即数据库中间件,它可以简单读写分离、......