django url中uuid十六进制值的正则表达式
Posted
技术标签:
【中文标题】django url中uuid十六进制值的正则表达式【英文标题】:Regex for uuid hex value in django urls 【发布时间】:2017-10-22 02:03:41 【问题描述】:我正在生成一个 uuid 值并希望从 django 中的 url 接收它,但我正在编写的正则表达式不起作用并告诉我找不到页面
import uuid
id = uuid.uuid4().hex
print id
be00e546822945bbb193b4ed80149c35
urls.py
>urlpatterns = [
url(r'^users/(?P<user_id>[0-9a-f]32\Z)/$', UserDetails.as_view(), name = 'users_detail'),
]
结果:
"GET /users/be00e546822945bbb193b4ed80149c35/ HTTP/1.1" 404 3302
那么 urls.py 中 uuid 十六进制值的正确正则表达式是什么?
【问题讨论】:
\Z
表示字符串的末尾。试试^users/(?P<user_id>[0-9a-f]32)/$
- 另见regex101.com/r/7bIuWN/1
【参考方案1】:
如果你想真的检查你是否有 UUID,试试这个:
[a-f0-9]8-?[a-f0-9]4-?4[a-f0-9]3-?[89ab][a-f0-9]3-?[a-f0-9]12
我不久前在 SO 上找到了它,并用了一段时间来检查数据是否实际上是正则表达式。没有直接用过Django URLS,不过我觉得应该没问题。
【讨论】:
【参考方案2】:urlpatterns = [
url(r'^users/(?P<user_id>[^/]+)/$', UserDetails.as_view(), name = 'users_detail'),
]
【讨论】:
请注意,[^/]+
将匹配除/
之外的任何字符,因此它也将匹配users/------/
。以上是关于django url中uuid十六进制值的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
django 2.2.5 URL 路径中的 URL 正则表达式