【问题标题】:Checking for content in Django request.POST检查 Django request.POST 中的内容
【发布时间】:2009-11-17 03:20:45
【问题描述】:

我通过 request.POST 接受数据,如下所示:

if request.method == 'POST': 
    l = Location() 
    data = l.getGeoPoints(request.POST) 
    appid = settings.GOOGLE_API_KEY 

    return render_to_response('map.html',  
                               {'data': data, 'appid': appid}, 
                               context_instance=RequestContext(request)) 

它从一组名为 form-0-location 一直到 form-5-location 的文本输入框接受数据。

我要添加的是检查以确保 request.POST 包含任何这些输入字段中的数据。我认为我的问题是我不知道在 Django 中描述这个的正确术语。

我知道如何在 PHP 中执行此操作:在 $_POST 中查看至少其中一个字段不为空,但我似乎无法通过搜索 google 找到正确的答案。

如果我在这些输入字段中没有找到任何数据,我想将用户重定向回主页。

【问题讨论】:

    标签: django forms data-processing


    【解决方案1】:

    你有没有想过使用Django's Forms??您可以在定义表单时将字段标记为“必填”,Django 将在提交时负责验证所述字段是否包含数据。他们还进行其他类型的验证。

    【讨论】:

    • 这是个好建议!也许在 djangoproject.com 上查看 ModelForms
    【解决方案2】:
    if request.method == 'POST' and request.POST:
           # Process request
    

    如果请求不包含任何数据,request.POST 将为 false。

    【讨论】:

    • 注意:假,不是“假”。与空字典或列表一样,它的计算结果为非 True。
    【解决方案3】:

    使用 Django 请求对象,POST 数据像字典一样存储,因此如果您知道字典中的键,则可以搜索它们并检查它们是否为空。查看这两个链接了解更多详情:

    http://docs.djangoproject.com/en/dev/ref/request-response/#attributes http://docs.djangoproject.com/en/dev/ref/request-response/#querydict-objects

    例如,当您有请求对象,并且知道您有一个名为“form-0-location”的键/变量时,您可以这样做:

    if request.POST.get('form-0-location'):
        print 'field is not None >> %s' % request.POST.get('form-0-location'')
    

    【讨论】:

    • 广告如果您不知道钥匙,您如何获得所有钥匙?循环什么?
    【解决方案4】:

    我赞同使用 Django Forms 的建议。在使用 Django 时为什么不利用 Django Forms?

    设计一个与您当前在页面上的字段相匹配的快速表单。用request.POST数据加载表单,并使用form.is_valid()判断表单是否有效。

    【讨论】:

      【解决方案5】:

      request.POST 返回一个 QueryDict 类型(它扩展了 Dictionary 超类)。

      这意味着您可以遍历该字典中的键(POST 中的所有参数)并在看到为空的键时返回 false

      (输入request.POST):

      if key k has invalid value (i.e. None or something else):
         return false
      return true
      

      【讨论】:

      • OP 希望在所有字段为空时返回 False,而不仅仅是一个。另外,请更好地格式化您的答案 - for 语句应该在代码中,false 和 true 应该是 FalseTrueif key has invalid code... 是伪代码。确保注释英文句子并提供有效的等效代码
      【解决方案6】:

      你也可以试试

      if len(request.POST['data'])<1:
          do something if empty
      else:
          do something if has data
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-24
        • 1970-01-01
        • 2022-01-12
        • 1970-01-01
        • 2012-09-18
        • 1970-01-01
        • 2021-12-20
        相关资源
        最近更新 更多