flask 普通函数无法使用return redirect?

代码:

@home.route('/article/add/', methods=['GET', 'POST'])
@login_required
def add_article():
    """添加新闻资讯"""
    o=None
    site_id=request.args.get('site', 0,type=int)
    site_info=get_site_or_redirect(current_user.id,site_id)
    。。。
def get_site_or_redirect(user_id,site_id):
    """获取站点信息,如果不存在,重定向至用户站点列表"""
    o=get_site(user_id,site_id)
    if not o:
        flash(u'未能找到此站点的信息! ',WARNING)
        return redirect(url_for('home.sites'))
    else:
        return o

getsiteor_redirect里的return redirect 无效?

阅读 6.7k
1 个回答

可以啊。

不过得换个方式,因为 redirect,你如果不 return 它的话,那么它就是一个普通的 Flask HTTP Response 对象而已。

#!/usr/bin/env python
# coding=utf-8

from flask import Flask, request
from werkzeug.routing import RequestRedirect

app = Flask(__name__)

def get_site_or_redirect(path):
    if path.startswith("/go/"):
        next_to = '/r' + "?ref=" + path
        raise RequestRedirect(next_to)
    else:
        return "get_site_or_redirect, no redirect"

@app.route("/r")
def r():
    via = request.args.get("ref", "")
    return "redirected,  from %s " % via


@app.route("/go/<num>")
def go(num):
    print("go,", num)
    s = get_site_or_redirect(request.path)
    print("go1, s", num, s)
    return "ok with no redirect"


@app.route("/bad")
def not_ok():
    res = get_site_or_redirect(request.endpoint)
    return res

    return "bad with no redirect"


if __name__ == '__main__':
    app.run(port=5439, debug=True)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进