Dans ce qui suit, si l'URL est définie sur, quel devrait être le modèle pour uuid?
urls.py
url(r'^getbyempid/(?P<emp_id>[0-9]+)/(?P<factory_id>[0-9]+)$',views.empdetails)
Ne fonctionne pas,
http://10.0.3.79:8000/app1/getbyempid/1/b9caf199-26c2-4027-b39f-5d0693421506
mais ça marche
http://10.0.3.79:8000/app1/getbyempid/1/2
En plus des chiffres de 0 à 9, l'uuid peut également inclure les chiffres a-f et des traits d'union.
(?P<factory_id>[0-9a-f-]+)
Vous pourriez avoir une expression rationnelle plus stricte, mais cela n'en vaut généralement pas la peine. À votre avis, vous pouvez faire quelque chose comme:
try:
factory = get_object_or_404(Factory, id=factory_id)
except ValueError:
raise Http404
qui gérera les uuids invalides ou uuids qui n’existent pas dans la base de données.
Depuis Django 2.0, vous n'avez même plus à vous soucier de regex pour UUID et int avec la nouvelle fonctionnalité Django: Path Converters .
Rend le code élégant à nouveau :
from Django.urls import path
...
urlpatterns = [
...
path('getbyempid/<int:emp_id>/<uuid:factory_id>', views.empdetails)
]
Juste pour compléter d’autres réponses, veuillez noter que la regex devrait être a-f
et non a-z
, donc:
urlpatterns = [
url(r'^request/(?P<form_id>[0-9A-Fa-f-]+)', views.request_proxy)
]
quelque chose comme ci-dessus pourrait être la réponse la plus précise.
Vos modèles d'URL ne prennent que des chiffres, essayez celui-ci:
url(r'^getbyempid/(?P<emp_id>[0-9a-z-]+)/(?P<factory_id>[0-9a-z-]+)$',views.empdetails)