如何使用支持多种类型的参数创建url模式?

2024-09-29 20:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

如果根据此正则表达式从url模式提取一个变量:

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

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

在url中,旧密码恢复电子邮件中的链接可能有u32id,新恢复电子邮件中可能有普通uid。但在视图中必须支持这两者。所以我们无论如何都要检查kwargs


Tags: pathreviewapiurluid链接电子邮件
2条回答

您可以制作自己的path converter来组合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

url.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()),
...

相关问题 更多 >

    热门问题