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

为什么后台编辑内容和网站上面显示的内容不一致广告片宣传片拍摄

为什么后台编辑内容和网站上面显示的内容不一致,广告片宣传片拍摄,微信网站制作教程,网站正在建设代码Django 中间件 一、Django 中间件基础 1.1 中间件工作原理 中间件是 Django 请求/响应处理的钩子框架。它是一个轻量级 的、底层的插件系统,用于全局修改 Django的输入或输出。每个中间件组件负责执行某些特定的功能。 1.2 中间件方法 class MiddlewareMixin:d…

Django 中间件

一、Django 中间件基础

1.1 中间件工作原理

中间件是 Django 请求/响应处理的钩子框架。它是一个轻量级 的、底层的插件系统,用于全局修改 Django的输入或输出。每个中间件组件负责执行某些特定的功能。

1.2 中间件方法

class MiddlewareMixin:def __init__(self, get_response=None):self.get_response = get_responsedef __call__(self, request):response = Noneif hasattr(self, 'process_request'):response = self.process_request(request)response = response or self.get_response(request)if hasattr(self, 'process_response'):response = self.process_response(request, response)return response

中间件类可以实现以下方法

  • process_request(request)
  • process_view(request, view_func, view_args, view_kwargs)
  • process_template_response(request, response)
  • process_exception(request, exception)
  • process_response(request, response)

二、自定义中间件示例

2.1 请求时间统计中间件

# middleware/timing.py
import time
from django.utils.deprecation import MiddlewareMixin
from django.core.cache import cacheclass RequestTimingMiddleware(MiddlewareMixin):def process_request(self, request):request.start_time = time.time()def process_response(self, request, response):if hasattr(request, 'start_time'):total_time = time.time() - request.start_timeresponse['X-Request-Time'] = f'{total_time:.2f}s'# 记录慢请求if total_time > 1.0:  # 超过1秒的请求cache.set(f'slow_request_{request.path}_{time.time()}',{'path': request.path,'method': request.method,'time': total_time,'user': str(request.user),},timeout=86400  # 24小时过期)return response

2.2 IP访问限制中间件

# middleware/ip_restriction.py
from django.core.exceptions import PermissionDenied
from django.core.cache import cache
from django.conf import settingsclass IPRestrictionMiddleware:def __init__(self, get_response):self.get_response = get_response# 白名单IP列表self.allowed_ips = getattr(settings, 'ALLOWED_IPS', [])def __call__(self, request):ip = self.get_client_ip(request)# 检查IP访问频率if self.is_ip_banned(ip):raise PermissionDenied('访问频率过高,请稍后再试')# 记录IP访问次数self.record_ip_request(ip)response = self.get_response(request)return responsedef get_client_ip(self, request):x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')if x_forwarded_for:ip = x_forwarded_for.split(',')[0]else:ip = request.META.get('REMOTE_ADDR')return ipdef is_ip_banned(self, ip):if ip in self.allowed_ips:return False# 获取IP的访问次数key = f'ip_requests_{ip}'requests = cache.get(key, 0)# 如果1分钟内访问超过100次,则禁止访问return requests > 100def record_ip_request(self, ip):key = f'ip_requests_{ip}'timeout = 60  # 1分钟过期# 原子操作增加计数cache.add(key, 0, timeout)cache.incr(key)

2.3 用户行为日志中间件

# middleware/user_logging.py
import json
import logging
from django.utils.deprecation import MiddlewareMixinlogger = logging.getLogger('user_behavior')class UserBehaviorMiddleware(MiddlewareMixin):def process_request(self, request):request.behavior_log = {'path': request.path,'method': request.method,'user_agent': request.META.get('HTTP_USER_AGENT', ''),'ip': self.get_client_ip(request),'user': str(request.user),'data': {}}# 记录请求数据if request.method in ['POST', 'PUT', 'PATCH']:try:request.behavior_log['data']['body'] = json.loads(request.body)except:request.behavior_log['data']['body'] = str(request.POST)if request.method == 'GET':request.behavior_log['data']['query'] = dict(request.GET)def process_response(self, request, response):if hasattr(request, 'behavior_log'):# 添加响应状态码request.behavior_log['status_code'] = response.status_code# 记录日志logger.info('User Behavior',extra={'behavior': request.behavior_log})return responsedef get_client_ip(self, request):x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')if x_forwarded_for:ip = x_forwarded_for.split(',')[0]else:ip = request.META.get('REMOTE_ADDR')return ip

三、中间件配置与使用

# settings.py
MIDDLEWARE = [# 提供了一系列的安全功能,如通过设置 X-Content-Type-Options 和 X-XSS-Protection 等 HTTP 头来增强安全性。'django.middleware.security.SecurityMiddleware',# 用于管理会话(Sessions)。它负责在用户浏览网站时,在服务器和客户端之间保持状态。'django.contrib.sessions.middleware.SessionMiddleware',# 提供了一些常用功能,例如将请求对象中的 request.user 和 request.path 等属性设置为当前用户和请求的路径。'django.middleware.common.CommonMiddleware',# 用于防止跨站请求伪造(CSRF)。它检查 POST 请求中的 CSRF token,确保请求是由当前用户发出的。'django.middleware.csrf.CsrfViewMiddleware',# 用于处理用户认证。它检查每个请求,看是否有用户已通过认证,并将用户对象存储在请求对象中,以便于后续的视图函数使用。'django.contrib.auth.middleware.AuthenticationMiddleware',# 用于处理消息传递。它允许你在模板中显示消息(例如表单错误或成功消息)。'django.contrib.messages.middleware.MessageMiddleware',# 防止点击劫持攻击。它通过设置 HTTP 响应头 X-Frame-Options 来防止网页被嵌入到其他网站中。'django.middleware.clickjacking.XFrameOptionsMiddleware',# 自定义中间件'middleware.timing.RequestTimingMiddleware','middleware.ip_restriction.IPRestrictionMiddleware','middleware.user_logging.UserBehaviorMiddleware',
]

请求进来时,中间件的执行顺序由上往下,响应返回时,由下往上

http://www.dtcms.com/wzjs/592354.html

相关文章:

  • 学网站开发有前途吗山东网站备案公司
  • 用ps切片做网站能不能完成网络托管运营
  • 音乐网站建设教程视频教程在国外做购物网站
  • 张槎网站开发做网站的html代码格式
  • 衡水网站建设设计网站域名骗子
  • 外网工业设计网站公众号 链接wordpress
  • 网站开发公司需要招聘哪些人银川做网站最好的公司
  • 南阳哪里做网站专门做游戏交易的网站
  • 网站上做销售网点怎么做工作邮箱认证提额
  • 中国海外旅游营销网站php论坛网站建设教程
  • 韶关网站推广长春财经学院录取分数线
  • 做网站工具做杂志的模板下载网站有哪些
  • 湖南网站推广电话电子商务网站软件平台
  • 公司注销的网站备案做网站都需要年服务费吗
  • 网站开发公司资质江西网站备案
  • 西宁做网站_君博相约编写软件的软件
  • 关于机场建设的网站网页制作与设计怎么设置圆角
  • 网站建设环境搭建心得体会dremwear做网站
  • 玩具外贸网站模板搜索引擎原理
  • 温州网站搭建公司软件开发网站建设维护
  • 什么样的网站开发比较吃香怎么查看网站的ftp
  • 网站建设及维护业务服务合同如何做网站公众号推广
  • 网站降权的表现肇庆广宁住房和城乡建设部网站
  • 规划网站需要几个步骤河南最新政策
  • 品牌的品牌推广设计百度网络优化推广公司
  • 协作网站是什么网站建设为什么有些100元的
  • 乐清网站建设公司哪家好江西建筑人才网
  • 重庆网站APP网站域名如何从代理商那里转出来
  • flash网站策划书保定网站推广公司
  • 密云建站推广网站后台编辑器内容不显示