我正在尝试使用couchdb和couchapp制作网页...
但由于某种原因,我需要使用python进行外部处理。
现在我陷入了如何处理python中的post变量...
但我想这样:
>>> a = {"success":1,"data":{"var1":1,"var2":2,"var3":3}}
>>> a["data"]["var2"]
2
>>> var2
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
var2
NameError: name 'var2' is not defined
>>> for key, value in a["data"].items():
print (key, value)
('var1', 1)
('var3', 3)
('var2', 2)
>>> var1
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
var1
NameError: name 'var1' is not defined
>>>
我想,当我输入var2时,它返回2
换句话说,当我不知道数据len
多少时,如何使嵌套的子对象成为变量..这是因为在外部python中,如何处理post变量就像这样req["form"]["var1"]
答案 0 :(得分:4)
您应该尝试使用数据字典更新本地(不推荐)或全局词典
>>> a = {"success":1,"data":{"var1":1,"var2":2,"var3":3}}
>>> a["data"]["var2"]
2
>>> locals().update(a["data"])
>>> var2
2
或
>>> globals().update(a["data"])
>>> var2
2
要以安全的方式执行此操作,您必须信任您正在更新全局字典的数据来源,以避免内置替换或其他有趣的代码注入。
答案 1 :(得分:2)
可以使用python“exec”语句构建一个字符串,然后动态执行它。
a = {"success":1,"data":{"var1":1,"var2":2,"var3":3}}
for key, value in a["data"].items():
exec('%s=%s' % (key, value, ))
print 'var1:', var1
print 'var2:', var2
print 'var3:', var3
答案 2 :(得分:1)
为了安全地做到这一点,我建议像:
allowed_variables = ('var1', 'var2', 'var3')
for k,v in a["data"].iteritems():
if k in allowed_variables:
locals.update({k:v})