it-swarm.com.ru

Django URL 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
8
Rajeev

Помимо цифр 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

который будет обрабатывать недействительные uuids или uuids, которые не существуют в базе данных.

29
Alasdair

Начиная с Django 2.0 вам даже не нужно беспокоиться о регулярных выражениях для UUID и int с новой функцией Django: Конвертеры пути .

Сделайте код снова элегантным:

from Django.urls import path
...

urlpatterns = [
    ...
    path('getbyempid/<int:emp_id>/<uuid:factory_id>', views.empdetails)
]
28
vishes_shell

Просто для завершения других ответов, обратите внимание, что регулярное выражение должно быть a-f, а не a-z, поэтому:

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

что-то вроде выше может быть самым точным ответом.

4
Afshin Mehrabani

Ваш шаблон URL принимает только цифры, попробуйте это:

url(r'^getbyempid/(?P<emp_id>[0-9a-z-]+)/(?P<factory_id>[0-9a-z-]+)$',views.empdetails)
1
Geo Jacob