Отключение Django Silk для определенных URL
У меня есть конечная точка API, на которой я могу загрузить фотографию, используя многочастный запрос. Когда Silk пытается разобрать запрос, я получаю ошибку декодирования.
Теперь я хочу отключить Silk для определенных конечных точек URL. Это уже возможно? Если так, как я должен настроить это? Если нет, то какой самый простой способ временно отключить Silk?
Ссылка на выпуск Github: https://github.com/jazzband/django-silk/issues/292
3 ответа
Пока это невозможно, но вы можете наследовать от промежуточного программного обеспечения 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 - это удалить его из списка промежуточного программного обеспечения.
Улучшение решения 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
)
Я использую django-silk==4.2.0, и у него есть конфигурация SILKY_IGNORE_PATHS, которую вы можете установить в настройках django.