Django-rest-framework: символ точки исключен из viewset lookup_field url conf

Созданный на 6 нояб. 2014  ·  4Комментарии  ·  Источник: encode/django-rest-framework

Где-то между djangorestframework==2.3.13 и djangorestframework==2.4.4 сгенерированный URL-адрес conf для ModelViewSet был изменен на исключение '.' (точка / точка) символ. Это означает, что ваше настраиваемое поле поиска не может быть доменным именем или какой-либо другой строкой, содержащей этот символ.

Учитывая набор представлений, например:

class ZoneViewSet(viewsets.ModelViewSet):
    lookup_field = 'domain__name'

Создаются следующие URL-адреса ( djangorestframework==2.3.13 ):

^api/ ^v1/ ^zones/(?P<domain__name>[^/]+)/$ [name='zone-detail']
^api/ ^v1/ ^zones/(?P<domain__name>[^/]+)/\.(?P<format>[a-z0-9]+)$ [name='zone-detail']

А теперь с djangorestframework==2.4.4 :

^api/ ^v1/ ^zones//$ [name='zone-detail']
^api/ ^v1/ ^zones/(?P<domain__name>[^/.]+)/\.(?P<format>[a-z0-9]+)$ [name='zone-detail']

[^] определяет набор исключений, поэтому [^/] исключает все косые черты, а [^/.] исключает косые черты и символы точки.

Я считаю, что нет причин ограничивать периоды в URI, и это изменение следует отменить.

Самый полезный комментарий

И вот коммит, который нарушил эту предыдущую функциональность https://github.com/tomchristie/django-rest-framework/commit/3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18. Журнал фиксации показывает, что вы знаете о проблеме. Я полагаю, вы не собираетесь его менять, поэтому я закрою этот вопрос.

Любой, кто обнаружит это, должен знать, что для того, чтобы разрешить периоды в urlconf, сгенерированные маршрутизатором по умолчанию, вам необходимо добавить lookup_value_regex = '[^/]+' в ваш набор представлений.

Все 4 Комментарий

И вот коммит, который нарушил эту предыдущую функциональность https://github.com/tomchristie/django-rest-framework/commit/3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18. Журнал фиксации показывает, что вы знаете о проблеме. Я полагаю, вы не собираетесь его менять, поэтому я закрою этот вопрос.

Любой, кто обнаружит это, должен знать, что для того, чтобы разрешить периоды в urlconf, сгенерированные маршрутизатором по умолчанию, вам необходимо добавить lookup_value_regex = '[^/]+' в ваш набор представлений.

Интересно, почему точка была исключена в первую очередь ...

Точки IIRC мешают добавлять тип содержимого расширения в URL-адреса, то есть /myendpoint.json.

А вот коммит, который нарушил предыдущую функциональность 3cd15fb . Журнал фиксации показывает, что вы знаете о проблеме. Я полагаю, вы не собираетесь его менять, поэтому я закрою этот вопрос.

Любой, кто обнаружит это, должен знать, что для того, чтобы разрешить периоды в urlconf, сгенерированные маршрутизатором по умолчанию, вам необходимо добавить lookup_value_regex = '[^/]+' в ваш набор представлений.

Огромное спасибо!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги