Django url uuid不工作

Raj*_*eev 12 django django-urls

在下面,如果url被设置为,那么uuid的模式应该是什么?

urls.py

url(r'^getbyempid/(?P<emp_id>[0-9]+)/(?P<factory_id>[0-9]+)$',views.empdetails)
Run Code Online (Sandbox Code Playgroud)

不起作用,

http://10.0.3.79:8000/app1/getbyempid/1/b9caf199-26c2-4027-b39f-5d0693421506
Run Code Online (Sandbox Code Playgroud)

但这很有效

http://10.0.3.79:8000/app1/getbyempid/1/2
Run Code Online (Sandbox Code Playgroud)

vis*_*ell 39

由于Django的2.0,你甚至都不需要担心的正则表达式UUID诠释新的Django特点:路径转换器.

让代码再次优雅:

from django.urls import path
...

urlpatterns = [
    ...
    path('getbyempid/<int:emp_id>/<uuid:factory_id>', views.empdetails)
]
Run Code Online (Sandbox Code Playgroud)

  • @Charlestone我相信_path转换器_在`re_path`中不起作用。 (2认同)

Ala*_*air 37

除了数字0-9之外,uuid还可以包括数字af和连字符,因此您可以将模式更改为

(?P<factory_id>[0-9a-f-]+)
Run Code Online (Sandbox Code Playgroud)

你可以有一个更严格的正则表达式,但它通常不值得.在您的视图中,您可以执行以下操作:

try:
    factory = get_object_or_404(Factory, id=factory_id)
except ValueError:
    raise Http404
Run Code Online (Sandbox Code Playgroud)

它将处理数据库中不存在的无效uuids或uuids.

  • 我认为如果 uuid 格式错误,`UUIDField` 会抛出一个 `ValidationError` ;只是更具体一点。 (2认同)

Afs*_*ani 5

只是为了完成其他的答案,请注意,正则表达式应该是a-f没有a-z,那么:

urlpatterns = [
    url(r'^request/(?P<form_id>[0-9A-Fa-f-]+)', views.request_proxy)
]
Run Code Online (Sandbox Code Playgroud)

上面的内容可能是最准确的答案。