Как перенаправить с помощью Flask и JQuery
использую 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 я бы сказал пользователю, что его имя пользователя или пароль неверны и т. Д.
На бэкенде мой / логин маршрут выглядит так
@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')
Однако на стороне клиента браузер неt перенаправить, и если я смотрю на объект ответа в полной функции, я вижу, что обычно будет возвращаться из моего '/' route: 200 OK и шаблон index.html.
Мой вопрос:
Есть ли какой-нибудь способ, которым я могу перехватить, чтобы перенаправить клиента?
Я предполагаю, что проблема в том, что jquery инициирует запрос, а не браузер.
Моя первая попытка решить эту проблему состояла в том, чтобы построить ответ самостоятельно, используяmake_response
и установите заголовок Location, но это привело к тому же поведению. Мое текущее решение состоит в том, чтобы вернуть 200, а затем клиент делаетwindow.location = "/"
, но это кажется взломанным