0

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

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

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

4

3 回答 3

2

目前还不可能,但您可以从 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 的最简单方法是将其从中间件列表中删除。

于 2018-06-26T11:49:03.423 回答
0

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

于 2021-11-13T16:02:01.687 回答
0

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
)
于 2022-03-01T18:27:54.160 回答