让Flask监听我的Fire中的实时更新

2024-04-19 07:15:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想让Flask在我的Firestore树中监听实时更新。你知道吗

我在link的文档中发现了这个代码片段:

# Create a callback on_snapshot function to capture changes
def on_snapshot(doc_snapshot, changes, read_time):
    for doc in doc_snapshot:
        print(u'Received document snapshot: {}'.format(doc.id))

doc_ref = db.collection(u'cities').document(u'SF')

# Watch the document
doc_watch = doc_ref.on_snapshot(on_snapshot)

但我不知道该怎么用在烧瓶里。你知道吗

基本上,我想让Flask监听Firestore中文档的更改,然后将这些更改发送到我的前端应用程序(Reactjs)。我一直在看烧瓶SocketIO,这似乎是我需要的,但我不确定。你知道吗

有人能帮我吗?你知道吗

编辑

我试着这样做:

# Create a callback on_snapshot function to capture changes
def on_snapshot(doc_snapshot, changes, read_time):
    for doc in doc_snapshot:
        flask_print("Received document snapshot: {}".format(doc.id))
        flask_print("snapshot was recieved from firebase!")
        emit("snapshot", {"data": doc.id})


@socketio.on("snapshot")
def snapshot_to_ferontend(snapshot):
    flask_print("snapshot was sent to frontend!")
    send(snapshot)


class SubscribeToGameById(Resource):
    def __init__(self):
        parser = reqparse.RequestParser()
        parser.add_argument("game_id", required=True)
        self.args = parser.parse_args()

    def put(self):
        doc_ref = db.collection("games").document(self.args["game_id"])
        doc_ref.on_snapshot(on_snapshot)

但是我得到一个错误,说:“RuntimeError:在请求上下文之外工作。”


Tags: toselfrefidparserflaskdocon
1条回答
网友
1楼 · 发布于 2024-04-19 07:15:18

您可以使用库flask-boiler来提供内容。在视图模型中介中实现notify方法GameViewMediator,如下所示:

class GameViewMediator(ViewMediatorDAV):

    def notify(obj):
        send(obj.to_dict())

并将视图模型GameView绑定到域模型Game

game_view = GameView()
game_view.bind_to(key="game", obj_type=Game, doc_id="game_id")
game_view.register_listener()

您应该看到websocket在每次更改时都会发出游戏的快照。你知道吗

相关问题 更多 >