首页 > 解决方案 > Django url 冲突

问题描述

使用 Django==2.2.11,djangorestframework==3.8.1

感谢您的阅读!

我正在使用的 url 有冲突:

urlpatterns = [
    . . . 
    url(
        r'^some-path$',
        views.MyViewSet.as_view({'get': 'list'})
    ),
    url(
        r'^some-path$',
        views.MyViewSet.as_view({'post': 'create'}),
    ),
    ...
]

我正在使用邮递员测试每条路径,这两个网址之间似乎存在冲突。

将此 url 与 GET 一起使用可以:

http://my_domain.com:8000/some-path

但是使用相同的 url(并且具有有效的有效负载)的 POST 会引发错误:

WARNING 2020-03-28 19:13:57,288 "POST /some-path HTTP/1.1" 405 41

和回应:

{"detail": "Method \"POST\" not allowed."}

我的 url 按顺序交换,然后 POST 会起作用,而 GET 会抛出类似的错误。

我看了这篇文章: 405 POST method not allowed

我很乐意添加视图代码 - 但我很确定问题出在 url 上,因为它们在交换订单时都可以工作。将根据要求添加。

谢谢!

编辑:我混淆了网址 - 添加了retrieve而不是list抱歉!

标签: djangourldjango-rest-frameworkdjango-viewsurl-routing

解决方案


如果您指向相同的端点,即/some-path,您应该添加额外的操作,

urlpatterns = [
    url(r'^some-path$', MusicianViewset.as_view({'post': 'create', 'get': 'list'})),
]

推荐阅读