Django url的优先级

Django url的优先级,django,django-rest-framework,django-urls,Django,Django Rest Framework,Django Urls,我一直在使用django rest框架开发的电子商务平台。URL的数量与日俱增,有许多设计结构类似的API端点(URL) 例如: /api/user/ /api/user/sigin/ /api/user/registration/ /api/user/invitation/edit/ /api/user/invitation/ 有时,当我点击任何url时,另一个url会被触发。假设我点击了/api/user/,但调用了/api/user/signin/ 如何解决此问题? django URL是

我一直在使用django rest框架开发的电子商务平台。URL的数量与日俱增,有许多设计结构类似的API端点(URL)

例如:

/api/user/

/api/user/sigin/

/api/user/registration/

/api/user/invitation/edit/

/api/user/invitation/

有时,当我点击任何url时,另一个url会被触发。假设我点击了
/api/user/
,但调用了
/api/user/signin/

如何解决此问题?


django URL是否有任何排序优先级?简短回答:制作不重叠的模式

问题是您的模式重叠。实际上,如果url是
/api/user/signin/
,并且
/api/user/
是url列表中的第一个模式,那么它将匹配该模式。事实上,由于
可以简单地与
signin
统一。列表后面还有另一个url也匹配,这一事实与此无关

因此,您应该设计非重叠模式。这意味着一种模式不能生成url,而另一种模式也不能生成url

例如,您可以将URL设计为:

/api/user/details/<str:user_uniq_id>/
/api/user/signin/
/api/user/registration/
/api/user/invitation/edit/
/api/user/invitation/details/<str:uniq_id>/
/api/user/details//
/api/用户/登录/
/api/用户/注册/
/api/用户/邀请/编辑/
/api/用户/邀请/详细信息//
因此,通过使用
/details
,URL
/api/user/sigin
无法匹配第一个模式,因为它需要包含
/api/user/details
作为前缀


另外,您可以将
/api/user/sign
路径放在路径列表的第一位。但这在我看来不是个好主意。如果稍后用户拥有as
uniq\u id
简单地
'signin'
(是的,这可能看起来很少见,但最终可能会发生),那么该用户就看不到他/她的“详细信息”页面。

您可以简单地将所有预定义的url放在下面提到的第一位,这样,如果url与它们匹配,它就会命中它,否则,它将移动到其他URL

/api/user/sigin/

/api/user/registration/

/api/user/<str:user_uniq_id>/

/api/user/invitation/edit/

/api/user/invitation/<str:uniq_id>/


/api/user/sigin/
/api/用户/注册/
/api/用户//
/api/用户/邀请/编辑/
/api/用户/邀请//
您的
将捕获所有其他模式,如
登录
等。