首页 > 解决方案 > 如果我不复制 API 端点,Django Get 请求将返回空数组

问题描述

在过去的 2 个月里,我一直在努力解决我无法确定的非常奇怪的行为。

我的 django 应用程序 urls 文件之一如下所示:

urlpatterns = {
    path('containers/', GetProductContainers.as_view()),
    path('delete/<deleteTime>', DeleteProcessedStockTime.as_view()),
    path('containers/', GetProductContainers.as_view()),
    path('input/', InsertMultiProcessedStock.as_view()),
    path('<str:stockT>/', ProcessedStockTimeView.as_view(), name="stockstime"),
    path('', ProductListDetailsView.as_view(), name="details"),
} 

如您所见,这条路径path('containers/', GetProductContainers.as_view()),在我的 urlpatterns 中有两次。这样做的原因是,只要我删除一个,它就会返回一个空数组。我删除哪一个并不重要!如果两者都存在,我会得到我期望的 319 条记录。我可以删除这两者中的任何一个,它会返回一个空数组,但是一旦我有 2 它就会再次工作。

谁能想到对此的解释,或者我什至可以如何开始调试它?

标签: djangodjango-rest-framework

解决方案


我相信这是因为您将 urlpatterns 创建为一个集合而不是一个列表。集合是无序类型,因此 url 模式不会以正确的顺序解析。

例子:

>>> {
...     path('containers/', TestView.as_view()),
...     path('delete/<deleteTime>', TestView.as_view()),
...     path('input/', TestView.as_view()),
...     path('<str:stockT>/', TestView.as_view(), name="stockstime"),
...     path('', TestView.as_view(), name="details"),
... }
{<URLPattern '<str:stockT>/' [name='stockstime']>, <URLPattern '' [name='details']>, <URLPattern 'containers/'>, <URLPattern 'delete/<deleteTime>'>, <URLPattern 'input/'>}


>>> [
...     path('containers/', TestView.as_view()),
...     path('delete/<deleteTime>', TestView.as_view()),
...     path('input/', TestView.as_view()),
...     path('<str:stockT>/', TestView.as_view(), name="stockstime"),
...     path('', TestView.as_view(), name="details"),
... ]
[<URLPattern 'containers/'>, <URLPattern 'delete/<deleteTime>'>, <URLPattern 'input/'>, <URLPattern '<str:stockT>/' [name='stockstime']>, <URLPattern '' [name='details']>]

推荐阅读