如何让一个列表的孩子成为蟒蛇
我试图使Web的变量只使用CouchDB的和couchapp ...
但由于某些原因,我使用python ..
现在需要外部进程我“M卡如何处理蟒蛇后变量...如何让一个列表的孩子成为蟒蛇
,但我想它是这样的:
>>> 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,如何处理后变量就是这样req["form"]["var1"]
你应该尝试与您的数据dictionnary更新本地(不推荐)或全球dictionnary
>>> 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
要以安全的方式执行此操作,您必须相信您正在更新全局词典的数据源,以避免内置替换或其他有趣的代码注入。
可以使用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
你可以,但这比更新本地人更危险!如果var2是导入子进程,该怎么办? subprocess.popen('rm','-rf','/') – 2011-05-03 12:23:22
要做到这一点安全,我建议是这样的:
allowed_variables = ('var1', 'var2', 'var3')
for k,v in a["data"].iteritems():
if k in allowed_variables:
locals.update({k:v})
+1对于安全...但是如果我检查它是否必须通过ajax调用,它仍然可以安全...所以在我的外部进程,先检查一下..是否使用ajax?如果是的话继续? – 2011-05-03 15:38:58
我不认为这是安全的。我可以看看你的AJAX代码,并修改它以注入我认为你可能会用在你的代码中的变量 - 例如os,sys,path等等......也许我可以用一个包含我的用户会话的细节覆盖管理员权限。一旦你覆盖当地人,你不能再相信任何函数或变量。它可能已被恶意用户覆盖。 – 2011-05-04 01:27:57
谢谢....我不知道阿贾克斯可以注入太多..我认为我不会使用'本地更新',如果它可以使我的项目是危险的,并注入.... 谢谢所有,谢谢堆栈用户..一个更多的知识给我.. – 2011-05-04 02:24:09
虽然一个很好的把戏,这不是在现实世界的Python编程建议。 – 2011-05-03 10:09:31
整洁!但正如Eli所说的文档证实,本地人不应该被修改... http://docs.python.org/library/functions.html – elliot42 2011-05-03 10:13:59
那么,如果不推荐当地人修改,我们可以更新globals dictionnary – 2011-05-03 10:18:33