【问题标题】:Django urls uuid not workingDjango urls uuid 不起作用
【发布时间】: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

【问题讨论】:

    标签: django django-urls


    【解决方案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')
        `
        

        【讨论】:

          猜你喜欢
          • 2014-09-02
          • 2019-10-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多