2013-05-09 42 views
11

Có những điều như biến python phạm vi ứng dụng trong Flask không? Tôi muốn thực hiện một số thông điệp nguyên thủy giữa người dùng và bộ nhớ cache dữ liệu được chia sẻ. Tất nhiên, nó có thể thực hiện điều này thông qua một cơ sở dữ liệu, nhưng tôi muốn biết có thể có một cách tiếp cận db-miễn phí và có lẽ nhanh hơn. Lý tưởng nhất, nếu biến chia sẻ sẽ là một đối tượng python sống, nhưng nhu cầu của tôi cũng sẽ hài lòng với chuỗi và int.Biến phạm vi ứng dụng trong Flask?

Edit: bổ sung với (không làm việc) ví dụ

from flask import g 

@app.route('/store/<name>') 
def view_hello(name=None): 
    g.name = name 
    return "Storing " + g.name 

@app.route("/retrieve") 
def view_listen(): 
    n = g.name 
    return "Retrieved: " + n 

Tại cố gắng để lấy g.name, điều này gây ra lỗi: AttributeError: đối tượng '_RequestGlobals' không có thuộc tính 'tên'

Trả lời

-6

Vì bình 0.10 flask.g sẽ là cách để đi.

Trong các phiên bản trước flask.g được lưu trữ trong ngữ cảnh yêu cầu và được xóa giữa các yêu cầu. Nếu bạn đang sử dụng một phiên bản cũ hơn, bạn nên lưu trữ mức thứ ứng dụng của bạn trong flask.current_app

+3

Tài liệu nói 'flask.g' là một đối tượng đặc biệt đảm bảo nó chỉ hợp lệ cho yêu cầu hoạt động và sẽ trả về các giá trị khác nhau cho mỗi yêu cầu. Rõ ràng nó không phải là câu trả lời đúng cho câu hỏi này. – ShuaiYuan

3

tôi không chắc chắn cho dù đây là một ý tưởng tốt hay không, nhưng tôi đã sử dụng này để chia sẻ dữ liệu dễ dàng giữa các yêu cầu:

class MyServer(Flask): 

    def __init__(self, *args, **kwargs): 
      super(MyServer, self).__init__(*args, **kwargs) 

      #instanciate your variables here 
      self.messages = [] 

app = MyServer(__name__) 

@app.route("/") 
def foo(): 
    app.messages.append("message") 
+1

Cách tiếp cận này giả định rằng nó là cùng một đối tượng ứng dụng được chia sẻ giữa các yêu cầu và nó không bao giờ chết. Tôi khá chắc chắn rằng không giữ trong các kịch bản phức tạp hơn so với máy chủ web dev đơn giản được xây dựng trong khuôn khổ Flask. – Passiday

+1

Có, bạn đã đúng. Đối với các ứng dụng rất nhỏ và đơn giản, đây là một cách dễ dàng để chia sẻ dữ liệu. –