如何制作一个参数支持多种类型的url模式



如果我有一个变量根据这个正则表达式从url模式中提取:

re_path(r'^reset/(?P<uid>[w]+)/?$', accounts.api.views.SetNewPassword.as_view()),

如何重写它以获取几个可能的变量:uid或u32id?

在url中,旧密码恢复电子邮件中的链接可能有u32id,新恢复电子邮件中可能有普通uid。但这两种观点都必须得到支持。所以我们无论如何都会检查他们两个的夸尔格。

您可以制作自己的路径转换器来组合您的uuids

from django.urls.converters import StringConverter, UUIDConverter
class MyCustomPathConverter(UUIDConverter):
regex = 'regex_of_uuid|regex_of_u32id'  # '|' is mandatory to distinguish multiple regex 
def to_python(self, value):
return value
def to_url(self, value):
return value

urls.py

from django.urls import path, register_converter 
register_converter(MyCustomPathConverter, 'my_uuid_converter')
path('reset/<my_uuid_converter:uid>/', accounts.api.views.SetNewPassword.as_view()),

使映射到同一视图的几个琐碎模式从更具体到不太具体排序:

path('reset/<uuid:uid>/', accounts.api.views.SetNewPassword.as_view()),
path('reset/<int:id>/', accounts.api.views.SetNewPassword.as_view()),
...

最新更新