Python Flask请求之间的持久对象

时间:2015-06-13 18:30:33

标签: python rest flask raspberry-pi

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

目前我可以创建一个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)

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

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

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

1 个答案:

答案 0 :(得分:6)

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

对于您的情况,由于您在任何给定时间只使用一个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