【问题标题】:Can Django-cms pages incorporate the vary_on_headers decorator?Django-cms 页面可以包含 vary_on_headers 装饰器吗?
【发布时间】:2013-10-14 11:45:17
【问题描述】:

我正在使用 Django-CMS 构建一个站点,我们使用 MobileESP 来检测用户代理并根据用于查看站点的设备提供不同的模板和内容。

问题在于使用 django-cms 的内置页面缓存,根据缓存的页面版本,用户会看到错误的内容。例如,如果先查看网站的桌面版本然后缓存,则通过智能手机访问该网站的用户仍会看到桌面版本,而不是移动版本。

对于传统的 Django 视图,可以使用 @vary_on_headers('User-Agent') 解决此问题,以确保正确缓存网站的不同版本。

是否有可能将此逻辑应用到 Django-CMS 视图中?

【问题讨论】:

    标签: django caching django-cms


    【解决方案1】:

    我设法通过在自定义中间件类中使用 patch_vary_headers() 功能找到解决此问题的方法。我已经有一个平台检测中间件,它将移动/桌面设置添加到请求对象。所以我只是在中间件中添加了一个 process_response 函数并在那里修补它。到目前为止,它似乎工作正常。

    class PlatformDetectionMiddleWare (object):
    
        def process_request(self, request):
            user_agent = request.META.get("HTTP_USER_AGENT")
            http_accept = request.META.get("HTTP_ACCEPT")
    
            agent = mdetect.UAgentInfo(userAgent=user_agent, httpAccept=http_accept)
            request.is_tablet = agent.detectTierTablet()
            request.is_mobile = agent.detectTierIphone()
    
        def process_response(self, request, response):
            patch_vary_headers(response, ['User-Agent'])
            return response
    

    【讨论】:

      【解决方案2】:

      http://www.djangobook.com/en/2.0/chapter15.html 我认为您可以像 SI Eric 建议的那样进行缓存,并且此链接谈论使用 vary_header 进行缓存,我认为它可以帮助解决您的问题。 我用

      缓存在视图层上
      @vary_on_headers('User-Agent')
      

      在我的项目中运行良好!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-14
        • 2020-05-20
        • 2017-04-10
        • 1970-01-01
        • 2016-04-05
        • 1970-01-01
        • 2011-02-27
        • 2011-12-01
        相关资源
        最近更新 更多