【问题标题】:request.POST.get('sth') vs request.POST['sth'] - difference?request.POST.get('sth') vs request.POST['sth'] - 区别?
【发布时间】:2012-09-20 18:18:38
【问题描述】:

有什么区别

request.POST.get('sth')

request.POST['sth']

没有找到类似的问题,两者对我来说都是一样的,假设我可以单独使用它们但也许我错了,这就是我问的原因。有什么想法吗?

【问题讨论】:

    标签: django


    【解决方案1】:

    如果'sth' 不在request.POST 中,request.POST['sth'] 将引发KeyError 异常。

    如果'sth' 不在request.POST 中,request.POST.get('sth') 将返回None

    此外,.get 允许您提供默认值的附加参数,如果键不在字典中,则返回该默认值。例如request.POST.get('sth', 'mydefaultvalue')

    这是任何 python 字典的行为,并不特定于 request.POST



    这两个 sn-ps 在功能上是相同的:

    第一个 sn-p:

    try:
        x = request.POST['sth']
    except KeyError:
        x = None
    


    第二次 sn-p:

    x = request.POST.get('sth')
    



    这两个 sn-ps 在功能上是相同的:

    第一个 sn-p:

    try:
        x = request.POST['sth']
    except KeyError:
        x = -1
    


    第二次 sn-p:

    x = request.POST.get('sth', -1)
    



    这两个 sn-ps 在功能上是相同的:

    第一个 sn-p:

    if 'sth' in request.POST:
        x = request.POST['sth']
    else:
        x = -1
    


    第二次 sn-p:

    x = request.POST.get('sth', -1)
    

    【讨论】:

    • +1。提到 .get 是 python 字典的默认行为。
    • “这是任何 python 字典的行为,并不特定于 request.POST”我希望我在使用 python 的第一天就阅读了这个答案...+1!
    • ¿ 在哪里可以找到 DJANGO 文档中的 request.POST.get() 参考?
    【解决方案2】:

    Request.POST 示例

    req.POST['name_your_desired_field'] 
    

    如果 'name_your_desired_field' 不在 req.POST 中,这将引发 KeyError 异常。

    request.POST.get('name_your_desired_field') 
    

    如果 'name_your_desired_field' 不在 req.POST 中,这将返回 None。

    虽然,.get 允许您提供默认值的附加参数,如果键不在字典中,则返回该默认值。例如,

    req.POST.get('name_your_desired_field', 'your_default_value')
    

    这是任何 python 字典的行为,并不特定于 req.POST

    Request.GET 示例

    request.GET.get('name_your_desired_field') 
    

    如果 'name_your_desired_field' 不在 req.GET 中,这将返回 None。

    尽管如此,.get 允许您提供默认值的附加参数,如果键不在字典中,则返回该默认值。例如,

    req.GET.get('name_your_desired_field', 'your_default_value')
    

    这是任何 python 字典的行为,并不特定于 req.GET

    【讨论】:

      【解决方案3】:

      普通字典访问和使用 .get() 访问的主要区别在于

      有 使用类似的东西 request.POST['sth'] 将出现一个关键错误是如果 ket 'sth' 不存在。 但是使用 get() 方法字典也会为您提供更好的错误处理

      request.POST.get('sth')
      

      将返回 none 是键 'sth 不存在' 并且通过将第二个参数提供给 get() 将作为默认值返回。

      data = request.POST.get('sth','my_default_value')
      

      如果'sth'键不存在,数据中的值将是my_default_value。 这就是使用 get() 方法优于普通字典访问的优势。

      【讨论】:

      • 此答案中提供的哪些内容尚未出现在高度赞成和接受的答案中?
      猜你喜欢
      • 2022-11-23
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多