gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 15:11:16 26 4
gpt4 key购买 nike

我使用 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 header ,但这导致了相同的行为。我当前的解决方案是返回 200,然后客户端执行 window.location = "/",但这看起来很老套

最佳答案

ajax 调用的重定向不起作用,浏览器不支持它们。大多数人通过在 JSON 响应中返回代码 200 和重定向到的 URL 来实现他们自己的自定义重定向解决方案。参见 this question一些很好的例子。

作为旁注,通过 ajax 发布登录表单并没有真正给您带来太多优势,我会让浏览器正常发布表单,然后您的 Flask View 函数在成功时重定向到新页面或重定向回失败时的登录页面,可能带有 flash 消息以通知用户错误。

关于jquery - 如何使用 Flask 和 jQuery 进行重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17248888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com