Django url的优先级 [英] Precedence of Django url
本文介绍了Django url的优先级的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我一直在使用Django REST框架开发的一个电子商务平台。URL的数量与日俱增,设计结构相似的API端点(URL)也很多。
如:
/api/user/<str:user_uniq_id>/
/api/user/sigin/
/api/user/registration/
/api/user/invitation/edit/
/api/user/invitation/<str:uniq_id>/
有时,当我点击任何URL时,另一个URL会被解雇。假设我点击/api/user/<str:user_uniq_id>
,但/api/user/signin/
被调用。
如何解决此问题?
Django URL是否有排序优先级?
推荐答案
简明答案:使不重叠模式。
问题是您的模式重叠。事实上,如果URL是/api/user/signin/
,并且/api/user/<str:user_uniq_id>/
是您的URL列表中的第一个模式,它将匹配该模式。事实上,因为<str:user_uniq_id>
可以简单地与signin
统一。列表中后面还有另一个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>/
通过这样使用/details
,URL/api/user/sigin
不可能匹配第一个模式,因为它需要包含/api/user/details
作为前缀。
/api/user/signin
路径放在路径列表的第一位。但在我看来,这不是一个好主意。如果用户后来只使用uniq_id
'signin'
(是的,这可能看起来很少见,但最终它会发生),则该用户将无法看到他/她的"详细信息"页面。
这篇关于Django url的优先级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文