Django 网址 uuid 不工作
Django urls uuid not working
下面如果url设置为,uuid的模式应该是什么?
urls.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/b9caf199-26c2-4027-b39f-5d0693421506
但这行得通
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)
除了数字 0-9 之外,uuid 还可以包含数字 a-f 和连字符,因此您应该将模式更改为
(?P<factory_id>[0-9a-f-]+)
您可以使用更严格的正则表达式,但通常不值得这样做。在您看来,您可以执行以下操作:
try:
factory = get_object_or_404(Factory, id=factory_id)
except ValueError:
raise Http404
这将处理数据库中不存在的无效 uuid 或 uuid。
只是为了完成其他答案,请注意正则表达式应该是 a-f
而不是 a-z
,所以:
urlpatterns = [
url(r'^request/(?P<form_id>[0-9A-Fa-f-]+)', views.request_proxy)
]
类似上面的内容可能是最准确的答案。
从 Django 2.0 开始,您甚至不需要担心 UUID 和 int 的正则表达式以及新的 Django 功能:Path Converters.
让代码再次优雅:
from django.urls import path
...
urlpatterns = [
...
path('getbyempid/<int:emp_id>/<uuid:factory_id>', views.empdetails)
]
有同样的问题,
用这个修复它:
url(r'^offer_details/(?P<uuid>[0-9a-f\-]{32,})$', offer_details, name='offer_details')
`
下面如果url设置为,uuid的模式应该是什么?
urls.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/b9caf199-26c2-4027-b39f-5d0693421506
但这行得通
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)
除了数字 0-9 之外,uuid 还可以包含数字 a-f 和连字符,因此您应该将模式更改为
(?P<factory_id>[0-9a-f-]+)
您可以使用更严格的正则表达式,但通常不值得这样做。在您看来,您可以执行以下操作:
try:
factory = get_object_or_404(Factory, id=factory_id)
except ValueError:
raise Http404
这将处理数据库中不存在的无效 uuid 或 uuid。
只是为了完成其他答案,请注意正则表达式应该是 a-f
而不是 a-z
,所以:
urlpatterns = [
url(r'^request/(?P<form_id>[0-9A-Fa-f-]+)', views.request_proxy)
]
类似上面的内容可能是最准确的答案。
从 Django 2.0 开始,您甚至不需要担心 UUID 和 int 的正则表达式以及新的 Django 功能:Path Converters.
让代码再次优雅:
from django.urls import path
...
urlpatterns = [
...
path('getbyempid/<int:emp_id>/<uuid:factory_id>', views.empdetails)
]
有同样的问题, 用这个修复它:
url(r'^offer_details/(?P<uuid>[0-9a-f\-]{32,})$', offer_details, name='offer_details')
`