Django-rest-framework: 从视图集 lookup_field url conf 中排除的点字符

创建于 2014-11-06  ·  4评论  ·  资料来源: encode/django-rest-framework

djangorestframework==2.3.13djangorestframework==2.4.4之间的某处,为 ModelViewSet 生成的 url conf 已更改为排除 '.' (句点/点)字符。 这意味着您的自定义 lookup_field 不能是域名或包含此字符的其他字符串。

给定一个视图集,例如:

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

生成以下网址( 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 = '[^/]+'到您的视图集中。

我想知道为什么 dot 首先被排除在外...

Iirc 点会干扰在 url 中添加扩展内容类型的能力 - 即 /myendpoint.json

这是破坏先前功能3cd15fb的提交。 提交日志显示您已意识到该问题。 我想你不打算改变它,所以我会关闭这个问题。

发现这一点的任何人都知道,为了允许默认路由器生成的 urlconf 中的句点,您需要将lookup_value_regex = '[^/]+'到您的视图集中。

非常非常感谢你!

此页面是否有帮助?
0 / 5 - 0 等级