Django中间件

位置:

  • 推荐在需要用到中间件的应用下创建middleware.py文件,将中间件定义在该文件内

定义

1. 函数式:

def judge_login_middleware(get_response):
	# 执行初始化的代码块
	def middleware(request):
		print('request-view之间的代码块')
		user_id = request.session.get("user_id")
		if user_id:
			try:
				user = User.objects.get(pk=user_id)
				request.front_user = user
			except:
				request.front_user = None
		else:
			request.front_user = None
		
		response = get_response(request)
		print('response到达浏览器之间的代码块')
		
		return response
	
	return middleware

2. 类式:

class JudgeLoginMiddleware(object):
	def __init__(self, get_response):
		print('执行初始化的代码块')
		self.get_response = get_response
	
	def __call__(self, request):
		print('request-view之间的代码块')
		user_id = request.session.get("user_id")
		if user_id:
			try:
				user = User.objects.get(pk=user_id)
				request.front_user = user
			except:
				request.front_user = None
		else:
			request.front_user = None
		
		response = self.get_response(request)
		print('response到达浏览器之间的代码块')
		
		return response

3. 将被弃用的一种方式:

from django.utils.deprecation import MiddlewareMixin

class JudgeLoginMiddlewareMixin(MiddlewareMixin):
	def __init__(self, get_response):
		print('执行初始化的代码块')
		super(JudgeLoginMiddlewareMixin, self).__init__(get_response)

	def process_request(self, request):
		"""request到view之间执行的代码块"""
		user_id = request.session.get("user_id")
		if user_id:
			try:
				user = User.objects.get(pk=user_id)
				request.front_user = user
			except:
				request.front_user = None
		else:
			request.front_user = None

	def process_response(self, request, response):
		"""response到浏览器之间的代码块"""
		return response
		

注册

  • settings.py文件中进行注册
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',  # 1.处理url最后的 / 2.user-agent:反爬虫
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',  # 给request对象添加一个user对象
    'django.contrib.messages.middleware.MessageMiddleware',  # 处理消息
    'django.middleware.clickjacking.XFrameOptionsMiddleware',  # clickjacking攻击保护
    ...
    ...
    'user.middleware.JudgeLoginMiddlewareMixin'
    
]
  • 中间件反爬虫,依赖于CommonMiddleware中间件
# settings.py
import re

DISALLOWED_USER_AGENTS = [
	re.compile(r'^\s$ | ^$')  # 请求头为空不处理
	re.compile(r'.PhantomJS.*')  # 请求头包含PhantomJS时不处理
]
  • 使用中间件将响应内容进行压缩,提高响应速度,如果小于200个长度,则不会被压缩,依赖于GZipMiddleware中间件,该中间件需要手动注册,必须放在UpdateCacheMiddleware 之后,如果没有UpdateCacheMiddleware, 则放在SecurityMiddleware之后。
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.gzip.GZipMiddleware'
    'django.contrib.sessions.middleware.SessionMiddleware',
]    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值