2009-11-17 117 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