为特定 URL 禁用 Django Silk
Disabling Django Silk for specific URLs
我有一个 API 端点,我可以在该端点上使用多部分请求上传照片。当 Silk 尝试解析请求时,出现解码错误。
我现在想为某些 URL 端点禁用 Silk。这已经可能了吗?如果是这样,我应该如何配置它?如果没有,暂时完全禁用 Silk 的最简单方法是什么?
Link 到 Github 问题:https://github.com/jazzband/django-silk/issues/292
还不可能,但是您可以从 Silk 中间件继承并使用 process_view django 中间件方法排除一些视图。例如。 django 中基于 class 的视图具有 view_class
属性,因此您可以找出中间件中的视图 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 的最简单方法是将其从中间件列表中删除。
我使用 django-silk==4.2.0,它有 SILKY_IGNORE_PATHS 配置,您可以在 django 设置中设置
milad 解决方案的一个改进是将 SILKY_IGNORE_PATHS
设置为自定义 class 并使用包含方法。这允许忽略包含路径参数的 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
)
我有一个 API 端点,我可以在该端点上使用多部分请求上传照片。当 Silk 尝试解析请求时,出现解码错误。
我现在想为某些 URL 端点禁用 Silk。这已经可能了吗?如果是这样,我应该如何配置它?如果没有,暂时完全禁用 Silk 的最简单方法是什么?
Link 到 Github 问题:https://github.com/jazzband/django-silk/issues/292
还不可能,但是您可以从 Silk 中间件继承并使用 process_view django 中间件方法排除一些视图。例如。 django 中基于 class 的视图具有 view_class
属性,因此您可以找出中间件中的视图 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 的最简单方法是将其从中间件列表中删除。
我使用 django-silk==4.2.0,它有 SILKY_IGNORE_PATHS 配置,您可以在 django 设置中设置
milad 解决方案的一个改进是将 SILKY_IGNORE_PATHS
设置为自定义 class 并使用包含方法。这允许忽略包含路径参数的 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
)