我正在尝试烧瓶,我有以下路线提供的表格:
@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"
以下是我的ajax请求的javascript代码,当输入字段中发生模糊事件时会调用该代码。
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。
问题在于,在对“电子邮件”路线的首次发布请求中,我得到了
错误的请求“缺少CSRF令牌。”
但是从下一个帖子请求开始,一切都很好。相同的csrf令牌也会在下一个请求中发送。为什么会这样呢? 我已全局启用csrf保护。