2009-11-17 56 views
2

我经由request.POST接受数据是这样的:在Django检查内容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)) 

它从一堆的文本输入框接收数据称为形式-O-位置一路最多form-5-location

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

我知道如何在PHP中做到这一点:查看内部$ _POST至少有一个字段不能为空,但我似乎无法通过搜索google找到正确的答案。

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

回答

8

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

+0

这是一个很好的建议!也许看看djangoproject.com上的ModelForms – kafuchau 2009-11-17 03:30:10

+0

我也推荐这种方法:) – Jiaaro 2009-11-17 14:04:03

3

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

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

而且,例如,当你有你的请求对象,你知道你有一个关键的/ var称为“形式-0-位置”,你可以这样做:

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

我第二个建议使用Django Forms。在使用Django时为什么不利用Django Forms?

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

2
if request.method == 'POST' and request.POST: 
     # Process request 

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

+3

注:falsy,而不是'False'。像空字典或列表一样,它的计算结果为非真。 – 2011-02-16 22:38:16

0

request.POST返回QueryDict类型(它扩展了字典超类)。

这意味着你可以通过在这个字典中的键(在POST所有参数)迭代,当你看到一个是空

(在request.POST键)返回false:

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

当所有的字段都是空的时,OP想要返回False,而不仅仅是一个。此外,请更好地格式化您的答案 - for语句应该在代码中,false和true应该是False和True,如果key有无效的代码是伪代码。确保评论英语句子并提供可用的等效代码 – 2012-10-02 16:34:55

0

你也可以试试类似

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