2011-05-03 37 views
0

我试图使Web的变量只使用CouchDB的和couchapp ...
但由于某些原因,我使用python ..
现在需要外部进程我“M卡如何处理蟒蛇后变量...如何让一个列表的孩子成为蟒蛇

心中已经阅读this(和它的作品)和this ...

,但我想它是这样的:

>>> 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"]

回答

4

你应该尝试与您的数据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 

要以安全的方式执行此操作,您必须相信您正在更新全局词典的数据源,以避免内置替换或其他有趣的代码注入。

+6

虽然一个很好的把戏,这不是在现实世界的Python编程建议。 – 2011-05-03 10:09:31

+0

整洁!但正如Eli所说的文档证实,本地人不应该被修改... http://docs.python.org/library/functions.html – elliot42 2011-05-03 10:13:59

+0

那么,如果不推荐当地人修改,我们可以更新globals dictionnary – 2011-05-03 10:18:33

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 
+1

你可以,但这比更新本地人更危险!如果var2是导入子进程,该怎么办? subprocess.popen('rm','-rf','/') – 2011-05-03 12:23:22

1

要做到这一点安全,我建议是这样的:

allowed_variables = ('var1', 'var2', 'var3') 

for k,v in a["data"].iteritems(): 
    if k in allowed_variables: 
     locals.update({k:v}) 
+0

+1对于安全...但是如果我检查它是否必须通过ajax调用,它仍然可以安全...所以在我的外部进程,先检查一下..是否使用ajax?如果是的话继续? – 2011-05-03 15:38:58

+1

我不认为这是安全的。我可以看看你的AJAX代码,并修改它以注入我认为你可能会用在你的代码中的变量 - 例如os,sys,path等等......也许我可以用一个包含我的用户会话的细节覆盖管理员权限。一旦你覆盖当地人,你不能再相信任何函数或变量。它可能已被恶意用户覆盖。 – 2011-05-04 01:27:57

+0

谢谢....我不知道阿贾克斯可以注入太多..我认为我不会使用'本地更新',如果它可以使我的项目是危险的,并注入.... 谢谢所有,谢谢堆栈用户..一个更多的知识给我.. – 2011-05-04 02:24:09