Django url的优先级 [英] Precedence of Django url

查看:17
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆