如何处理Python Flask重定向

Bri*_*pio 1 python flask

我想知道在Flask中提供重定向的最佳方法是什么.我有一个删除按钮,如下所示:

<a href="/elastic_ips/{{region}}/delete/{{eli['public_ip']}}"><button class="btn btn-danger btn-mini" type="button">Delete</button></a>
Run Code Online (Sandbox Code Playgroud)

哪个叫app.route:

@app.route('/elastic_ips/<region>/delete/<ip>')
def delete_elastic_ip(region=None,ip=None):
        creds = config.get_ec2_conf()
        conn = connect_to_region(region, aws_access_key_id=creds['AWS_ACCESS_KEY_ID'], aws_secret_access_key=creds['AWS_SECRET_ACCESS_KEY'])
        ip = ip.encode('ascii')
        elis = conn.get_all_addresses(addresses=ip)

        for eli in elis:
                result = []
                r = eli.release()
                result.append(r)
        return Response(json.dumps(result), mimetype='application/json')
Run Code Online (Sandbox Code Playgroud)

我宁愿不把结果作为json返回.我不确定使用删除按钮返回页面的"正确"方法是什么.要么我可以放入一个HTML页面,只是重定向到引用,或者在Flask中是否有内置方式返回app.route?

Ign*_*nas 7

好吧如果你想返回它的url delete_elastic_ip,很容易做url_for 功能(更多关于这个功能)

不知道这个端点是否在某个蓝图中,但如果没有,这很简单:

from flask import url_for, redirect
.... your code ...
return url_for('delete_elastic_ip', region=None, ip=None)
Run Code Online (Sandbox Code Playgroud)

您也可以使用当然需要的值替换Nones :)这将返回到端点的URL.顺便说一下,这也是一种模板中的网址.不要对它们进行硬编码,在jinja模板中使用url_for函数为您生成视图的URL.该函数可作为模板中的标准全局变量(更多)

此外,如果您只想直接重定向到其他端点并且不返回任何内容,那么redirect在flask中有一个函数.结合url_for使用它,你很高兴;)

from flask import url_for, redirect
... your code...
return redirect(url_for('delete_elastic_ip', region=None, ip=None))
Run Code Online (Sandbox Code Playgroud)

它会刷新页面,所以如果你想要的话,不是ajax重定向的最佳方式.对于ajax,只需返回带有url_for结果的json并用它做一些事情.