2010-09-27 23 views
7

bất cứ ai có thể giải thích dòng nàyLàm thế nào để hiểu mã này của bình? ?

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

mã từ bình

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) 

mã của địa phương là ở đây: http://pastebin.com/U3e1bEi0

+1

Lambda đang được sử dụng vì LocalProxy() lấy đối số hàm. – tponthieux

Trả lời

4

Các Werkzeug documentation cho LocalStack và LocalProxy có thể giúp đỡ, cũng như một số cơ bản sự hiểu biết của WSGI.

Dường như điều đang xảy ra là ngăn xếp toàn cầu (nhưng trống) _request_ctx_stack được tạo. Điều này có sẵn cho tất cả các chủ đề. Một số đối tượng kiểu WSGI (current_app, request, sessiong) được đặt để sử dụng mục trên cùng trong ngăn xếp chung.

Tại một số thời điểm, một hoặc nhiều ứng dụng WSGI được đẩy lên ngăn xếp chung. Sau đó, khi, ví dụ, current_app được sử dụng trong thời gian chạy, ứng dụng hàng đầu hiện tại được sử dụng. Nếu ngăn xếp không bao giờ được khởi tạo, thì đầu sẽ trả về Không và bạn sẽ nhận được một ngoại lệ như AttributeError: 'NoneType' object has no attribute 'app'.

+6

Gần đúng nhưng không hoàn toàn. _request_ctx_stack là một ngăn các bối cảnh yêu cầu, giữ ứng dụng hiện tại, yêu cầu, phiên và các hình cầu yêu cầu. Các ngữ cảnh này được đẩy vào ngăn xếp trên cơ sở theo yêu cầu, nếu không điều này không thể hoạt động. – DasIch

Các vấn đề liên quan