我有五個要檢查的項在request.REQUEST中。所以我想確保first_name,last_name,年齡,性別和位置都在request.REQUEST中。那麼如果有一個或多個不在那裏,我想告訴哪些屬性丟失了。如何判斷請求中是否有缺少的項目。Django中的請求
有沒有辦法做到這一點,而不使用一堆if語句?
我有五個要檢查的項在request.REQUEST中。所以我想確保first_name,last_name,年齡,性別和位置都在request.REQUEST中。那麼如果有一個或多個不在那裏,我想告訴哪些屬性丟失了。如何判斷請求中是否有缺少的項目。Django中的請求
有沒有辦法做到這一點,而不使用一堆if語句?
missing_keys = []
for i in ('item1', 'item2', 'item3'):
if i not in request.REQUEST:
missing_keys.append(i)
創建一組您所期望的按鍵和一組被返回的鑰匙,和相交他們:
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
在開始的時候也使用不同的方法。在這裏,我檢查了expected
是got
的一個子集,因此got
可能包含比預期更多的子集。如果您要檢查它們是完全一樣的,將其更改爲:
if len(expected.difference(got)) == 0:
(即如果在兩者之間的差異爲零)。
但是真的,你應該使用Django's built in Forms。做這樣的事情會更好。
import sets
missing = sets.Set(request.REQUEST.keys()).difference(['first_name', 'last_name', ...])
更新,使用內置集:
set(request.REQUEST.keys()).difference(['first_name', 'last_name', ...])
爲什麼即使使用sets模塊,但不是內置set類型?該模塊已棄用btw – 2012-04-23 07:38:36
@bildja好點!我更新了答案。謝謝! – Willian 2012-04-23 07:43:20
是。使用[形式](https://docs.djangoproject.com/zh/dev/topics/forms/) – 2012-04-23 06:50:13