django七大中间件的作用,django中间件的运行机制_1

  django七大中间件的作用,django中间件的运行机制

  什么是中间件?

  高流量的站点通常需要在负载均衡代理后部署Django。这种方法会带来一些复杂性。一个是远程IP地址(请求。每个请求中的META[ REMOTE _ IP ]]将指向负载平衡代理,而不是发起请求的实际IP。处理这个问题的负载均衡代理的方法是将实际请求的IP设置在特殊的X-Forwarded-For中。

  因此,需要一个小的中间件来保证运行在代理后面的站点也能在请求中获得正确的IP地址。META[远程_ADDR]:

  classsetremoteadddrfromforforwardedfor(object):

  defprocess_request(自身,请求):

  尝试:

  real _ ip=请求。META[HTTP_X_FORWARDED_FOR]

  exceptKeyError:

  及格

  else:

  # HTTP _ X _ FORWARDED _ FORcanbeacomma逗号分隔的listofIPs。

  #Takejustthefirstone。

  real_ip=real_ip.split(,)[0]

  请求。META[远程ADDR ]=真实ip

  (注: althoughthehtpheaderiscalledx-Forwarded-For,Djangomakesitavailableasrequest。META[HTTP_X_FORWARDED_FOR]。with theexceptionofcontent-length和content-type,any httpheadersinterrequest areconvertedtorequest。meta keysbyconvertingallcharacterstouppercase,用enthurscores和_ PrefixTothename替换cinganhyphen。)一旦安装了中间件(见下一节),每个请求中的X-Forwarded-For值将自动插入到请求中。META[远程_ADDR]。这样,Django应用程序不需要关心它们是否在负载平衡代理的后面;阅读请求的简单方法。无论有没有代理,META[REMOTE_ADDR]都将正常工作。

  实际上,Django已经在这种非常常见的情况下构建了中间件。它位于django.middleware.http中,下一节将给出关于这个中间件的更多细节。

  安装中间件

  要启用一个中间件,只需将它添加到配置模块的MIDDLEWARE_CLASSES元组中。在MIDDLEWARE_CLASSES中,中间件组件由字符串表示:中间件类名的完整Python路径。例如,下面是django-admin.py startproject创建的默认中间件类:

  中间件类=(

   django . middleware.common.common middleware ,

   django . contrib . sessions . middleware . session middleware ,

   django . contrib . auth . middleware . authenticationmiddleware ,

  )Django项目的安装不需要任何中间件。如果你愿意,MIDDLEWARE_CLASSES可以为空。

  中间件在这里出现的顺序非常重要。在请求和视图的处理阶段,Django按照MIDDLEWARE_CLASSES的顺序应用中间件,而在响应和异常处理阶段,Django按照相反的顺序调用它们。也就是说,Django把MIDDLEWARE_CLASSES看作是视图函数外层的顺序包装器:在请求阶段,它从上到下穿过,而在响应阶段,它是反过来的。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: