Django urls uuid 不起作用
Posted
技术标签:
【中文标题】Django urls uuid 不起作用【英文标题】:Django urls uuid not working 【发布时间】:2016-01-02 05:13:31 【问题描述】:下面如果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
【问题讨论】:
【参考方案1】:从 Django 2.0 开始,您甚至无需担心带有新 Django 功能的 UUID 和 int 的正则表达式:Path Converters。
让代码再次优雅:
from django.urls import path
...
urlpatterns = [
...
path('getbyempid/<int:emp_id>/<uuid:factory_id>', views.empdetails)
]
【讨论】:
re_path(r'^(?P<Model>[A-Za-z]+)/<uuid:id>)',
对我不起作用
@Charlestone 我相信 路径转换器 在 re_path
中不起作用。
@vishes_shell 可以,但您需要进行一些更改:docs.djangoproject.com/en/3.0/topics/http/urls【参考方案2】:
除了数字 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。
【讨论】:
您可能需要添加try ... except ValueError: raise Http404()
以便将不可转换为 uuid 的输入视为无效 uuid。
@moooeeeep 好点 - 如果您使用的是 UUIDField
,那么对于不可转换为 uuid 的字符串,需要捕获 ValueError
。
我认为如果 uuid 格式错误,UUIDField
会抛出 ValidationError
;只是为了更具体一点。【参考方案3】:
只是为了完成其他答案,请注意正则表达式应该是a-f
而不是a-z
,所以:
urlpatterns = [
url(r'^request/(?P<form_id>[0-9A-Fa-f-]+)', views.request_proxy)
]
类似上面的内容可能是最准确的答案。
【讨论】:
【参考方案4】:您的网址格式只包含数字,试试这个:
url(r'^getbyempid/(?P<emp_id>[0-9a-z-]+)/(?P<factory_id>[0-9a-z-]+)$',views.empdetails)
【讨论】:
【参考方案5】:有同样的问题, 用这个修复它:
url(r'^offer_details/(?P<uuid>[0-9a-f\-]32,)$', offer_details, name='offer_details')
`
【讨论】:
以上是关于Django urls uuid 不起作用的主要内容,如果未能解决你的问题,请参考以下文章