如何判断Django中request.REQUEST中是否有缺少的项目

时间:2012-04-23 06:47:36

标签: python django

我要检查的五个密钥是否在request.REQUEST中。所以我想确保first_name,last_name,年龄,性别和位置都在request.REQUEST中。然后,如果不存在一个或多个,我想告诉哪些属性丢失。

有没有办法在不使用一堆if语句的情况下执行此操作?

3 个答案:

答案 0 :(得分: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。做这样的事情要好得多。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

使用内置集更新:

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