Flask-WTF CSRF 令牌丢失

Flask-WTF CSRF token is missing

根据 flask-wtf (v. 0.14.2, python 3.4.6) here 的文档,我在对 [=14 做出反应时收到 CSRF token is missing 400 错误=] 来自简单单选按钮的事件。

<script type="text/javascript">
// Send the status of the radio buttons using AJAX
function radio_changed(){
  var csrf_token = "{{ csrf_token() }}";

    $.ajaxSetup({
        beforeSend: function(xhr, settings) {
            if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
                xhr.setRequestHeader("X-CSRFToken", csrf_token);
            }
        }
    });
    var radioValue = $("input[class=radios]:checked").val();
   //alert(radioValue);
   $.ajax({
                    url: '/_radio_update',
                    data: {value:radioValue},
                    type: 'POST',
                    success: function(response){
                            console.log(response);
                    },
                    error: function(error){
                            console.log(error);
                    }
            });
}
</script>

然后

<form method=post action="">
{{ form.csrf_token }}
...

在烧瓶方面:

...
from flask_wtf.csrf import CSRFProtect

app = Flask(__name__)
app.secret_key = 'shhhhhhh!'
csrf = CSRFProtect(app)

@app.route('/_radio_update', methods=['GET', 'POST'])
def _radio_update(radiostatus):
    print(radiostatus)
...

我是不是漏了什么?

wtforms 导入的 Forms 和从 flask.ext.wtf 导入的 Forms 似乎有区别,根据 documentation 末尾的注释导致问题。

处理弃用通知后,最后我更改了行:

from wtforms import Form, RadioField, SubmitField, validators
class InputForm(Form):
...

from wtforms import RadioField, SubmitField, validators
from flask_wtf import FlaskForm
class InputForm(FlaskForm):
...

这解决了我的问题。