Отключение 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.

Другие вопросы по тегам