Django URL uuid不工作
在下面的例子中,如果url设置为,那么uuid的模式应该是什么 url.pyDjango URL uuid不工作,django,django-urls,Django,Django Urls,在下面的例子中,如果url设置为,那么uuid的模式应该是什么 url.py url(r'^getbyempid/(?P<emp_id>[0-9]+)/(?P<factory_id>[0-9]+)$',views.empdetails) 但这是有效的 http://10.0.3.79:8000/app1/getbyempid/1/2 您的url模式仅包含数字,请尝试以下模式: url(r'^getbyempid/(?P<emp_id>[0-9a-z-]+)
url(r'^getbyempid/(?P<emp_id>[0-9]+)/(?P<factory_id>[0-9]+)$',views.empdetails)
但这是有效的
http://10.0.3.79:8000/app1/getbyempid/1/2
您的url模式仅包含数字,请尝试以下模式:
url(r'^getbyempid/(?P<emp_id>[0-9a-z-]+)/(?P<factory_id>[0-9a-z-]+)$',views.empdetails)
url(r'^getbyempid/(?P[0-9a-z-]+)/(?P[0-9a-z-]+)$,views.empdetails)
除了数字0-9之外,uuid还可以包括数字a-f和连字符,因此您可以将模式更改为
(?P<factory_id>[0-9a-f-]+)
它将处理无效的UUID或数据库中不存在的UUID。为了完成其他答案,请注意正则表达式应该是
a-f
而不是a-z
,因此:
urlpatterns = [
url(r'^request/(?P<form_id>[0-9A-Fa-f-]+)', views.request_proxy)
]
urlpatterns=[
url(r'^request/(?P[0-9A-Fa-f-]+),视图。请求\代理)
]
类似上面的内容可能是最准确的答案。自从Django 2.0以来,您甚至不需要担心带有新Django特性的UUID和int的正则表达式: 让代码再次优雅起来:
from django.urls import path
...
urlpatterns = [
...
path('getbyempid/<int:emp_id>/<uuid:factory_id>', views.empdetails)
]
从django.url导入路径
...
URL模式=[
...
路径('getbyempid/',views.empdetails)
]
也有同样的问题,
修正了这个问题:
url(r'^offer\u details/(?P[0-9a-f\-]{32,})$,offer\u details,name='offer\u details')
`
您可能需要添加一个尝试。。。ValueError除外:raise Http404()
为了将不可转换为uuid的输入视为无效的uuid。@Moooeeep很好的一点-如果您使用的是UUIDField
,则需要捕捉ValueError
来处理不可转换为uuid的字符串。我认为UUIDField
会在uuid无效时抛出ValidationError
畸形的;更具体地说,我认为路径转换器在re_path
@vishes_shell中不起作用,但您需要做一些更改:
urlpatterns = [
url(r'^request/(?P<form_id>[0-9A-Fa-f-]+)', views.request_proxy)
]
from django.urls import path
...
urlpatterns = [
...
path('getbyempid/<int:emp_id>/<uuid:factory_id>', views.empdetails)
]