Django urls uuid не работает
в следующем, если 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
4 ответов
а также цифры 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, которые не существуют в базе данных.
Так как Django 2.0 вам даже не нужно беспокоиться о regex для UUID и int С новой функцией Django:Преобразователи Путь.
сделать элегантный код:
from django.urls import path
...
urlpatterns = [
...
path('getbyempid/<int:emp_id>/<uuid:factory_id>', views.empdetails)
]
чтобы завершить другие ответы, обратите внимание, что регулярное выражение должно быть a-f
не a-z
, так:
urlpatterns = [
url(r'^request/(?P<form_id>[0-9A-Fa-f-]+)', views.request_proxy)
]
что-то вроде выше, может быть самый точный ответ.
ваши шаблоны url принимают только номера, попробуйте это:
url(r'^getbyempid/(?P<emp_id>[0-9a-z-]+)/(?P<factory_id>[0-9a-z-]+)$',views.empdetails)