web-dev-qa-db-fra.com

Django ne fonctionne pas

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

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.

29
Alasdair

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)
]
28
vishes_shell

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.

4
Afshin Mehrabani

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)
1
Geo Jacob