如何禁用带有flask-wtf的视图的csrf for rest api?

问题描述 投票:2回答:1

我使用flask-wtf为rest api禁用csrf的问题。问题类似于这里:qazxsw poi,但我使用原装而不是烧瓶。

我使用Flask-Restful POST fails due CSRF protection of Flask-WTF,我完全喜欢文档,但仍然无法禁用csrf。这是我的代码,你知道这是什么问题吗?

没有app.朋友

@csrf.exemptdecorator

我的邮差总是回归:

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField
from flask_wtf.csrf import CSRFProtect

app = Flask(__name__)    
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SECRET_KEY'] = "secret"

db = SQLAlchemy(app)

csrf = CSRFProtect(app) # initialize the csrf protect

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String())

class myForm(FlaskForm):
    username = StringField("user name")

@app.route("/check", methods=['POST'])    
@csrf.exempt # why this code doesn't work???!!! :(
def check():
    form = myForm(request.form)

    if form.validate():
        user = User(username=form.username.data)
        db.session.add(user)
        db.session.commit()
        return jsonify(message="user saved!"), 200
    else:
        return jsonify(message=form.errors), 404

if __name__ == '__main__':
    app.run(debug=True)
python flask flask-wtforms flask-restful
1个回答
2
投票

{ "message": { "csrf_token": [ "The CSRF token is missing." ] } } 似乎是那个返回错误的人,即尝试

FlaskForm.validate()

要么

form = myForm(request.form, csrf_enabled=False)

因为class myForm(FlaskForm): class Meta: csrf = False username = StringField("user name") 似乎被弃用了。

从文档中

使用FlaskForm处理请求的任何视图都已获得CSRF保护。

© www.soinside.com 2019 - 2024. All rights reserved.