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 功能的 UUIDint 的正则表达式:Path Converters。

让代码再次优雅

from django.urls import path
...

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

【讨论】:

re_path(r'^(?P&lt;Model&gt;[A-Za-z]+)/&lt;uuid:id&gt;)', 对我不起作用 @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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

django - url标签不起作用

Django URL 模式不起作用

Django url 似乎不起作用

Django URL 标记不起作用 - NoReverseMatch

django 参数通过获取在形成直接 url 时不起作用

注销在 Django 中不起作用