2011-05-03 61 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