中间件(Middleware)

中间件

问题1:中间件的背后的设计理念是什么?(分离横切关注功能/拦截过滤器模式)
问题2:中间件有哪些不同的实现方式(参考下面代码)
问题3:描述Django内置的中间件及其执行顺序。(推荐阅读:Django官方文档 - 中间件 - 中间件顺序

激活中间件
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'common.middlewares.block_sms_middleware',
]
自定义中间件
def simple_middleware(get_response):
  def middleware(response, *args, **kwargs)
    response = get_response(resquest, *args, **kwargs)
    return response
  return middleware
class MyMiddleware(object):
  def __init__(self, get_response):
    self.get_response = get_response
  def __call_(self, request):
    response = self.get_response(request)
    return response
class MyMiddleware(object):
  def __init__(self):
    pass
  def process_request(request):
    pass
  def process_view(request, view_func, view_args, view_kwargs):
    pass
  def process_template_response(request, response):
    pass
  def process_response(request, response):
    pass
  def process_exception(request, exception):
    pass
内置中间件

1.CommonMiddleware - 基础设置中间件

  • DISALLOWED_USER_AGENT-不被允许的用户代理(浏览器)
  • APPEND_SLASH-是否追加/
  • USE_ETAG-浏览器缓存相关

2.SecurityMiddleware - 安全相关中间件

  • SECURE_HSTS_SECONDS - 强制使用HTTPS的时间
  • SECURE_HSTS_INCLUDE_SUBDOMAINS_HTTPS是否覆盖子域名
  • SECURE_CONTENT_TYPE_NOSNIFF - 是否允许浏览器推断内容类型
  • SECURE_BROWSER_XSS_FILTER - 是否启用跨站脚本攻击过滤器
  • SECURE_SSL_REDIRECT - 是否重定向到HTTPS连接
  • SECURE_REDIRECT_EXEMPT - 免除重定向到HTTPS

3.SessionMiddleware - 会话中间件
4.CsrfViewMiddleware - 防范跨站身份伪造中间件

5.XFrameOptionsMiddleware - 防范点击劫持攻击中间件
F0RIU@M52SIA4_Z}@TV3XIB.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。