【问题标题】:Disabling Django Silk for specific URLs为特定 URL 禁用 Django Silk
【发布时间】:2018-06-26 10:12:03
【问题描述】:

我有一个 API 端点,我可以在该端点上使用多部分请求上传照片。当 Silk 尝试解析请求时,出现解码错误。

我现在想为某些 URL 端点禁用 Silk。这已经可能了吗?如果是这样,我应该如何配置它?如果没有,暂时完全禁用 Silk 的最简单方法是什么?

Github 问题链接:https://github.com/jazzband/django-silk/issues/292

【问题讨论】:

    标签: django django-silk


    【解决方案1】:

    目前不可能,但是您可以从 Silk 中间件继承,并使用 process_view django 中间件方法排除某些视图。例如。 django 中基于类的视图具有view_class 属性,因此您可以找出中间件中的视图类:

    def process_view(request, view_func, view_args, view_kwargs):
        if view_func.view_class == SomeClassBasedView:
            # ignore it
        else:
            return super().process_view(request, view_func, view_args, view_kwargs)
    

    暂时完全禁用 Silk 的最简单方法是将其从中间件列表中删除。

    【讨论】:

    • 也许你应该在项目中创建onr fork并选择手动处理url?
    【解决方案2】:

    我使用 django-silk==4.2.0,它有 SILKY_IGNORE_PATHS 配置,您可以在 django 设置中设置

    【讨论】:

      【解决方案3】:

      对 milad 解决方案的改进是将SILKY_IGNORE_PATHS 设置为具有包含方法的自定义类。这允许忽略包含路径参数的 url。

      在 urls.py 中:

      from silk.config import SilkyConfig
      
      urlpatterns = [
          ...
      ]
      
      class PathMatcher:
          def __init__(self, url_patterns):
              self.url_patterns = url_patterns
      
          def __contains__(self, item):
              item = item.lstrip('/')
              return any(p.pattern.match(item) for p in self.url_patterns)
      
      
      SilkyConfig().SILKY_IGNORE_PATHS = PathMatcher(
          urlpatterns[5:10] +  # a subset of the patterns specified in urlpatterns
          [u for u in router.urls if u.name.startswith('analytics-event')] +  # a subset of DRF router urls
          [re_path('^admin/analytics/event/(.*)', lambda: None)]  # hardcoded path
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-26
        • 2019-02-04
        • 1970-01-01
        相关资源
        最近更新 更多