Sha*_*mim 3 django django-urls django-rest-framework
我一直在使用 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>/
有时,当我点击任何网址时,另一个网址就会被触发。假设我击中了/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 可以由另一种模式生成。
例如,您可以将网址设计为:
/api/user/details/<str:user_uniq_id>/
/api/user/signin/
/api/user/registration/
/api/user/invitation/edit/
/api/user/invitation/details/<str:uniq_id>/Run Code Online (Sandbox Code Playgroud)
通过这样使用/details,URL 无法/api/user/sigin匹配第一个模式,因为它需要包含/api/user/details作为前缀。
或者,您可以将该/api/user/signin路径放在路径列表中的第一位。但这对我来说似乎不是一个好主意。如果稍后用户有同样的uniq_id简单'signin'(是的,这可能看起来很少见,但最终它可能会发生),那么该用户将无法看到他/她的“详细信息”页面。
| 归档时间: |
|
| 查看次数: |
525 次 |
| 最近记录: |