Я пробую колбу, у меня есть форма, которая подается по следующему маршруту:
@app.route("/register",methods=['GET','POST'])
def register():
form = RegistrationForm()
if form.validate_on_submit():
employee = Employee(name=form.name,emp_id=form.emp_id,email=form.email,password=form.password)
return redirect(url_for('home'))
return render_template('register.html',form=form)
Я хотел пройти проверку на стороне клиента, чтобы проверить, существует ли введенная электронная почта в базе данных. Я попытался отправить поле электронной почты на другой маршрут, который указан ниже, чтобы увидеть, как все работает.
@app.route('/email',methods=['POST'])
def email():
print(request.form['email'])
return "success"
Ниже приведен мой javascript-код для запроса ajax, который вызывается при возникновении события размытия в поле ввода.
function emailSubmit(event) {
console.log($('#email').serialize());
$.ajax({
type: "POST",
url: url,
data: $('#email').serialize(), // serializes the form's elements.
success: function(data) {
console.log(data) // display the returned data in the console.
}
});
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrfToken)
}
}
})
}
Файл javascript находится в статической папке, а URL и csrf_token предоставляются с использованием глобальных переменных.
Проблема в том, что при первом отправлении запроса на маршрут "email" я получаю
Неверный запрос "Маркер CSRF отсутствует."
Но все прекрасно работает, начиная со следующего запроса. Тот же токен csrf отправляется и в следующем запросе. Почему это происходит?
Я включил защиту CSRF глобально.