2012-04-23 108 views
0

我有五個要檢查的項在request.REQUEST中。所以我想確保first_name,last_name,年齡,性別和位置都在request.REQUEST中。那麼如果有一個或多個不在那裏,我想告訴哪些屬性丟失了。如何判斷請求中是否有缺少的項目。Django中的請求

有沒有辦法做到這一點,而不使用一堆if語句?

+3

是。使用[形式](https://docs.djangoproject.com/zh/dev/topics/forms/) – 2012-04-23 06:50:13

回答

0
missing_keys = [] 
for i in ('item1', 'item2', 'item3'): 
    if i not in request.REQUEST: 
    missing_keys.append(i) 
1

創建一組您所期望的按鍵和一組被返回的鑰匙,和相交他們:

expected = set(['first_name', 'last_name', 'age']) 
got = set(request.REQUEST.keys()) 

if expected.issubset(got): 
    # Request contained everything you expected 
    # Bonus points: check if field was present but empty 
    for field in got: 
     if request.REQUEST[field].strip() == "": 
      # Field was present but empty 
else: 
    # Some things were different 
    print expected.difference(got) 

您可以expected在開始的時候也使用不同的方法。在這裏,我檢查了expectedgot的一個子集,因此got可能包含比預期更多的子集。如果您要檢查它們是完全一樣的,將其更改爲:

if len(expected.difference(got)) == 0: 

(即如果在兩者之間的差異爲零)。

但是真的,你應該使用Django's built in Forms。做這樣的事情會更好。

0
import sets 
missing = sets.Set(request.REQUEST.keys()).difference(['first_name', 'last_name', ...]) 

更新,使用內置集:

set(request.REQUEST.keys()).difference(['first_name', 'last_name', ...])

+1

爲什麼即使使用sets模塊,但不是內置set類型?該模塊已棄用btw – 2012-04-23 07:38:36

+0

@bildja好點!我更新了答案。謝謝! – Willian 2012-04-23 07:43:20