Django 的优先级 url
Precedence of Django url
我一直在使用 django rest framework 开发的电子商务平台。 urls 的数量每天都在增加,并且有许多 API 端点(urls),其设计结构相似。
如:
/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 urls 有排序优先吗?
简答:制作非重叠模式。
问题是您的模式重叠。实际上,如果 url 是 /api/user/signin/
,并且 /api/user/<str:user_uniq_id>/
是 URL 列表中的第一个模式,它将匹配该模式。事实上,由于 <str:user_uniq_id>
可以简单地与 signin
统一。事实上,列表后面还有另一个 url 也匹配,这无关紧要。
因此你应该设计非重叠模式。所以这意味着没有 url 可以由一种模式生成,可以由另一种模式生成。
例如,您可以将 url 设计为:
/api/user<b>/details</b>/<str:user_uniq_id>/
/api/user/signin/
/api/user/registration/
/api/user/invitation/edit/
/api/user/invitation<b>/details</b>/<str:uniq_id>/
因此使用 /details
,URL /api/user/sigin
无法匹配第一个模式,因为它需要包含 /api/user/details
作为前缀。
或者,您可以将 /api/user/signin
路径放在路径列表的第一位。但这对我来说不是一个好主意。如果稍后用户 uniq_id
只是 'signin'
(是的,这可能看起来很少见,但最终会发生),那么该用户将无法看到 his/her "details" 页面。
你可以简单地将所有预定义的 url 放在前面,如下所述,这样如果 url 与它们匹配则它会命中它,否则它会移动到另一个 urls.
/api/user/sigin/
/api/user/registration/
/api/user/<str:user_uniq_id>/
/api/user/invitation/edit/
/api/user/invitation/<str:uniq_id>/
我一直在使用 django rest framework 开发的电子商务平台。 urls 的数量每天都在增加,并且有许多 API 端点(urls),其设计结构相似。
如:
/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 urls 有排序优先吗?
简答:制作非重叠模式。
问题是您的模式重叠。实际上,如果 url 是 /api/user/signin/
,并且 /api/user/<str:user_uniq_id>/
是 URL 列表中的第一个模式,它将匹配该模式。事实上,由于 <str:user_uniq_id>
可以简单地与 signin
统一。事实上,列表后面还有另一个 url 也匹配,这无关紧要。
因此你应该设计非重叠模式。所以这意味着没有 url 可以由一种模式生成,可以由另一种模式生成。
例如,您可以将 url 设计为:
/api/user<b>/details</b>/<str:user_uniq_id>/
/api/user/signin/
/api/user/registration/
/api/user/invitation/edit/
/api/user/invitation<b>/details</b>/<str:uniq_id>/
因此使用 /details
,URL /api/user/sigin
无法匹配第一个模式,因为它需要包含 /api/user/details
作为前缀。
或者,您可以将 /api/user/signin
路径放在路径列表的第一位。但这对我来说不是一个好主意。如果稍后用户 uniq_id
只是 'signin'
(是的,这可能看起来很少见,但最终会发生),那么该用户将无法看到 his/her "details" 页面。
你可以简单地将所有预定义的 url 放在前面,如下所述,这样如果 url 与它们匹配则它会命中它,否则它会移动到另一个 urls.
/api/user/sigin/
/api/user/registration/
/api/user/<str:user_uniq_id>/
/api/user/invitation/edit/
/api/user/invitation/<str:uniq_id>/