2016-02-26 2 views
0

Я использую flask_wtf для защиты веб-страниц, которые не являются формами, но которые содержат данные Ajax из JavaScript.Flask_WTF ошибка атрибута декоратора csrf

Я получаю объект 'AttributeError:' module 'не имеет атрибута' error_handler '' для декоратора '@ csrf.error_handler' и не может решить почему.

на сервере Колба:

from flask_wtf import csrf 
app = Flask(__name__) 
app.config.from_object(config) 
csrf.CsrfProtect(app) 

@csrf.error_handler 
def csrf_error(reason): 
    return render_template('404.html', reason=reason) 

@app.route('/completed/') 
def completed(results, methods=['POST']): 
    data = str(request.form['data']) 

JavaScript:

function sendAjax(data){ 
    //@param data: JSON stringified object 
    var csrfToken = document.getElementsByName("csrf_token").getAttribute("content"); 
    var xhr = new XMLHttpRequest(); 
    xhr.open('PUT', '/completed'); 
    xhr.setRequestHeader('Content-Type', 'application/json'); 
    xhr.onload = function() { 
     if (xhr.status === 200) { 
      var userInfo = JSON.parse(xhr.responseText); 
     } 
    }; 
    xhr.send(data); 
} 

HTML:

<!-- 'form' with hidden field just so can post data back to server --> 
<form method="post" action="{{ url_for('completed') }}"> 
    <meta id="csrf_token" content="{{ csrf_token() }}" /> 
</form> 

ответ

1

Вам нужно связать обработчик ошибок с экземпляром CsrfProtect.

from flask_wtf.csrf import CsrfProtect 

app = Flask(__name__) 
csrf = CsrfProtect(app) 

@csrf.error_handler 
def csrf_error(reason): 
    return render_template('404.html', reason=reason) 
Смежные вопросы