Python 请求之间的 Flask 持久对象

Python Flask persistent object between requests

我正在 Raspberry Pi 上为 OMXPlayer 创建一个网络界面。我正在尝试创建一个更像 API 的 REST 来控制播放的视频。我遇到的问题是如何在播放时控制视频。

目前我可以创建一个 Player 对象,作为一些可用于启动和停止视频的方法。

@main.route("/video", methods=["GET", "POST"])
@login_required
def video():
    form = VideoForm()

    if form.validate_on_submit():
        url = form.url.data
        vid_output = form.vid_output.data
        player = Player(url=url, output=vid_output)
        player.toggle_pause()
        return redirect('/video')

    return render_template("video.html", form=form)

现在我想要另一个 URL 可以再次 运行 Player.toggle_pause() 方法。

@main.route("/video/stop", methods=["GET", "POST"])
@login_required
def video_stop():
    player.toggle_pause()

我的问题是我找不到让这个对象在两个请求之间保持不变的方法。视频将在发送第一个请求后开始播放,但试图停止或控制它不会让我访问创建的对象。有没有办法在两个单独的请求之间保留此对象?

跨请求保留信息的唯一方法是将其存储在某个地方并在下一个请求时检索它。或者使用从客户端传递的参数重新创建对象(包括状态)。

对于您的情况,由于您在任何给定时间都只会使用一个 Player,因此您可以将其设为全局。 (为方便起见,删除了一些行)

player = None

def video():
    global player
    form = VideoForm()
    if form.validate_on_submit():
        url = form.url.data
        vid_output = form.vid_output.data
        player = Player(url=url, output=vid_output)

def video_pause():
    global player
    if not player:
        return
    player.toggle_pause()

def video_stop():
    global player
    if not player:
        return
    player.exit_omx_player()
    player = None