Jak chápat tento kód baňky?

hlasů
8

Mohl by někdo vysvětlit tento řádek?

g = LocalProxy(lambda: _request_ctx_stack.top.g) 

Kód z baňky

from werkzeug import LocalStack, LocalProxy

# context locals
_request_ctx_stack = LocalStack()
current_app = LocalProxy(lambda: _request_ctx_stack.top.app)
request = LocalProxy(lambda: _request_ctx_stack.top.request)
session = LocalProxy(lambda: _request_ctx_stack.top.session)
g = LocalProxy(lambda: _request_ctx_stack.top.g) 

Kód lokálních je zde: http://pastebin.com/U3e1bEi0

Položena 27/09/2010 v 02:13
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
4

Dokumentace Werkzeug pro LocalStack a LocalProxy může pomoci, stejně jako některé základní pochopení WSGI .

Zdá se, co se děje, je, že globální (ale prázdný) zásobník _request_ctx_stackje vytvořen. To je pro všechny závity k dispozici. Některé objekty WSGI stylu ( current_app, request, sessiona g) jsou nastaveny na používání horní položku v globálním stohu.

V určitém okamžiku jeden nebo více aplikací WSGI se nasune na globální fronty. Pak, když se například current_apppoužívá při běhu, je použit aktuální top aplikace. Je-li zásobník nikdy inicializaci pak top vrátí None a budete mít výjimku, jako je AttributeError: 'NoneType' object has no attribute 'app'.

Odpovězeno 13/10/2010 v 16:49
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more