当前位置: 首页 > 面试题库 >

如何使用Flask和jQuery进行重定向

魏朗
2023-03-14
问题内容

我正在使用Flask作为后端,并使用jQuery作为我正在从事的个人项目。

要登录,我想这样做:

$.ajax({ 
    type: "POST",
    data: JSON.stringify(body), //username and password
    contentType: 'application/json; charset=utf-8',
    url: "/login",
    success: successFunction,
    error: errorFunction,
    complete: completeFunction
});

errorFuction中,我会告诉用户其用户名或密码不正确,等等。

在后端,我的/ login路由如下所示

@app.route("/login", methods=['GET', 'POST'])
def login():
    if(request.method == "POST"):
        #retrieve the username and password sent
        data = request.json

        if(data is None or not 'username' in data or not 'password' in data):
            abort(400)
        else:
            count = User.query.filter(User.username == data['username']).count()
            if(count == 0):
                abort(404) #that user doesnt exist
            else:
                passIsCorrect = User.query.filter(User.username == data['username'],
                                                  User.password == data['password']).count()
                if(passIsCorrect):
                    session['user'] = data['username']
                    return redirect(url_for('index'))
                else:
                    abort(401)

    else:
        return render_template('login.html')

但是在客户端,浏览器不会重定向,如果我在完整功能中查看响应对象,我会看到通常从我的“ /”路由返回的内容:200 OK和index.html模板。

我的问题是:

有什么方法可以拦截客户端重定向?

我认为问题是因为jquery发起了请求而不是浏览器。

我解决此问题的第一个尝试是使用make_response并设置Location标头构造自己的响应,但这导致了相同的行为。我当前的解决方案是返回200,然后客户端执行window.location = "/"此操作,但这似乎很hack


问题答案:

Ajax调用的重定向不起作用,浏览器不支持它们。大多数人通过返回代码200和要在JSON响应中重定向到的URL来实现自己的自定义重定向解决方案。

附带说明一下,通过ajax发布登录表单并没有真正给你带来很多好处,我会让浏览器正常发布表单,然后在成功时将Flask视图函数重定向到新页面或重定向回登录页面失败时,可能会显示一条flash消息,通知用户错误。



 类似资料:
  • 本文向大家介绍如何使用jQuery进行页面重定向?,包括了如何使用jQuery进行页面重定向?的使用技巧和注意事项,需要的朋友参考一下 要重定向到jQuery中的另一个网页,请使用。您可以尝试运行以下代码以重定向到另一个网页- 示例

  • 问题内容: 如何使用JavaScript从另一个页面重定向到页面? 问题答案: 要重定向到另一个页面,可以使用:

  • 我在ajax上卡住了,我有第一个选择框,这列出了所有国家的发送者,我也有第二个选择框,这也列出了国家的接收者。我使用ajax追加国家,但现在的问题是,第二个选择框没有填充。 我用php函数调用国家 我的路线 现在我的ajax 我的选择框如下所示 对于发件人: 那么对于接收方: 现在只有发送方的选择框总是被填充,而接收方不会。请告诉我如何使用AJAX填充两个选择框。 null

  • Flask类有重定向函数。调用时,它会返回一个响应对象,并将用户重定向到具有指定状态码的另一个目标位置。 函数的原型如下 - 在上述函数中 - location 参数是响应应该被重定向的URL。 statuscode 参数发送到浏览器的头标,默认为。 response 参数用于实例化响应。 以下状态代码是标准化的 - HTTP_300_MULTIPLE_CHOICES HTTP_301_MOVED

  • 问题内容: 我正在使用Flask的内置开发服务器来开发Flask应用程序。我使用Flask-Script启动它。我想切换为使用Gunicorn作为Web服务器。为此,我需要在Flask-Script和Gunicorn之间编写某种集成代码吗?还是Flask-Script与使用Gunicorn运行应用程序无关? 提前致谢! 到@ sean-lynch的道具。以下是根据他的回答而工作,经过测试的代码。我

  • 问题内容: 我有一个名为 我有一个手机网站 我想使用htaccess自动将主网站URL重定向到移动版本。 但是,移动版本上有一个指向主要网站的链接,称为 当我单击实际网站首页上的徽标时,它会链接到 我不希望通过单击主页上的徽标来意外允许用户返回移动设备。在没有JavaSCript的情况下,如何通过htaccess做到这一点。 如果没有,我会开放选择。 编辑 我想我目前将用它来通过htaccess感