Flask重定向到页面然后回来

时间:2017-07-11 16:47:56

标签: python flask

我有一个我想要的小烧瓶应用程序,当点击链接时,转到该链接然后返回到刚刚离开的页面。

原因是链接转到物理设备重启页面。我有很多这些设备,并希望让脚本运行它们,然后重新启动然后返回到起始页面。

我可以到达链接并且设备重置但无法返回,因为它现在位于外部页面上。有什么想法吗?

修改

感谢@xyres我有以下内容:

from flask import Flask, render_template, redirect, url_for, request
import urllib

app = Flask(__name__)


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/reboot')
def reboot():
    link = request.args.get('link')
    if link:
        urllib.request.urlopen(link)
    return redirect(request.referrer or url_for('index'))

if __name__ == '__main__':
    app.run(debug=True)

但它会点击页面并且在重定向之前不会等待足够长的时间以便单位不重启...

2 个答案:

答案 0 :(得分:1)

一旦浏览器转到另一个页面,重定向浏览器的服务器或多或少就会失去对浏览器的控制权。想想看:您是否想要访问互联网上的网页,即使您离开该页面,也可以继续控制您的浏览器?

然而,您可能会考虑使用iframe而不是传统链接。这是一个网页示例,当您单击按钮时,它会在iframe中加载Wikipedia,然后在您单击完成后关闭它。

$( document ).ready(function() {
    $('#btn-go').click(function() {
        $('#ifr-loader').show();
        $('#ifr-loader').attr('src', 'https://www.wikipedia.org');
    });
    $('#btn-finish').click(function() {
        $('#ifr-loader').attr('src', '');
        $('#ifr-loader').hide();
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btn-go">Go to Other Site</button>
<button id="btn-finish">Finish</button>

<hr>
<iframe id="ifr-loader" style="display: none; width: 100%; height: 80%"></iframe>

答案 1 :(得分:1)

您可以从后端向外部链接发出请求。而不是给客户端提供实际链接,而是为他们提供您控制的备用链接。例如:

http://yourapp.com/make-request?link=http://actual-link.com

因此,您可以在/make-request/ url处创建一个处理程序。

from flask import request, redirect, url_for
import urllib

@app.route('/make-request')
def make_request()
    link = request.args.get('link')
    if link:
        urllib.urlopen(link) # for Python 3.x use urllib.request.urlopen

    # now redirect back to the referrer
    # if no referrer, redirect to some_view
    return redirect(request.referrer or url_for('some_view'))