Django-rest-framework: caractere ponto excluído do conjunto de visualizações lookup_field url conf

Criado em 6 nov. 2014  ·  4Comentários  ·  Fonte: encode/django-rest-framework

Em algum lugar entre djangorestframework==2.3.13 e djangorestframework==2.4.4 a configuração de url gerada para um ModelViewSet foi alterada para excluir '.' (ponto / ponto) caractere. Isso significa que seu lookup_field personalizado não pode ser um nome de domínio ou alguma outra string que inclua esse caractere.

Dado um conjunto de visualizações como:

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

Os seguintes urls são gerados ( 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']

E agora com djangorestframework==2.4.4 :

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

O [^] especifica um conjunto de exclusão, portanto [^/] exclui todas as barras, enquanto [^/.] exclui barras e pontos.

Acredito que não haja motivo para restringir os períodos em URIs e essa alteração deve ser revertida.

Comentários muito úteis

E aqui está o commit que quebrou essa funcionalidade anterior https://github.com/tomchristie/django-rest-framework/commit/3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18. O log de commit mostra que você está ciente do problema. Presumo que você não pretenda alterá-lo, então encerrarei este problema.

Qualquer pessoa que encontrar isso esteja ciente de que, para permitir períodos no urlconf gerado pelo roteador padrão, você precisa adicionar lookup_value_regex = '[^/]+' ao seu conjunto de visualizações.

Todos 4 comentários

E aqui está o commit que quebrou essa funcionalidade anterior https://github.com/tomchristie/django-rest-framework/commit/3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18. O log de commit mostra que você está ciente do problema. Presumo que você não pretenda alterá-lo, então encerrarei este problema.

Qualquer pessoa que encontrar isso esteja ciente de que, para permitir períodos no urlconf gerado pelo roteador padrão, você precisa adicionar lookup_value_regex = '[^/]+' ao seu conjunto de visualizações.

Eu me pergunto por que o ponto foi excluído em primeiro lugar ...

Os pontos Iirc interferem na capacidade de adicionar tipo de conteúdo de extensão em urls - ou seja, /myendpoint.json

E aqui está o commit que quebrou essa funcionalidade anterior 3cd15fb . O log de commit mostra que você está ciente do problema. Presumo que você não pretenda alterá-lo, então encerrarei este problema.

Qualquer pessoa que encontrar isso esteja ciente de que, para permitir períodos no urlconf gerado pelo roteador padrão, você precisa adicionar lookup_value_regex = '[^/]+' ao seu conjunto de visualizações.

Muito obrigado!

Esta página foi útil?
0 / 5 - 0 avaliações