ajax - Angularjs + Flask-wtf : Bad request 400

标签 ajax angularjs flask flask-wtforms bad-request

我在 wtf-forms 中遇到了一个非常奇怪的问题,我使用 angularjs $http-module 发送请求。初始化 WTForm 后,我收到一个 错误请求:400 错误。出于测试目的,我禁用了 csrf 保护。我真的不知道在哪里寻找问题。以下是最小的失败:

Angularjs 服务发送请求:

var data = new FormData();
data.append('surname', _gifter.surname);
data.append('lastname', _gifter.lastname);
data.append('email', _gifter.email);
data.append('email_confirm', _gifter.email_confirm);
data.append('prize', gift.prize);

$http.post('ajax/claim/' + DataProvider.gift.id + '/', data)

flask 路线:
@app.route('/ajax/claim/<int:gift_id>/', methods = ['POST'])
def claim_gift(gift_id):
    print("request:" + request.data)
    claim_form = ClaimGiftForm(csrf_enabled=False)
    return 'success'

WT表格:
class ClaimGiftForm(Form):
    surname = TextField(
        validators=[validators.Required()])
    lastname = TextField(
        validators=[validators.Required()])
    email = EmailField(
        validators = [
            validators.email(),
            validators.Required()])
    email_confirm = EmailField(
        validators = [
            validators.Required(),
            validators.EqualTo()])
    prize = IntegerField()

当我打印请求时(参见“Flask route”),数据似乎没问题 - 一切都正确传输。但是在初始化表单时,我得到了上述错误。

编辑1:我刚刚发现,出于某种原因 request.form MultiDict 为空,尽管 request.data包含预期的数据。但是我不知道为什么会这样。

编辑2:pprint(request.data)给出:
-----------------------------109386632915471364402090498247\r\nContent-Disposition: form-data; name="surname"\r\n\r\ntheName\r\n
-----------------------------109386632915471364402090498247\r\nContent-Disposition: form-data; name="lastname"\r\n\r\ntheLastname\r\n
-----------------------------109386632915471364402090498247\r\nContent-Disposition: form-data; name="email"\r\n\r\nsomeone@somewhere.net\r\n
-----------------------------109386632915471364402090498247\r\nContent-Disposition: form-data; name="email_confirm"\r\n\r\nsomeone@somewhere.net\r\n
-----------------------------109386632915471364402090498247\r\nContent-Disposition: form-data; name="prize"\r\n\r\n12\r\n
-----------------------------109386632915471364402090498247--\r\n'

最佳答案

你的 JavaScript 有 email_confirmed但是表单的字段是email_confirm .

关于ajax - Angularjs + Flask-wtf : Bad request 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30851873/

相关文章:

javascript - jQuery Ajax : FormData is returning 403 error for base64 data

javascript - Angular JS 工厂理解 - 加载时出现错误

javascript - 迭代嵌套对象 - 如果字段匹配变量,则更新 $scope

javascript - 即使建立连接后,Flask socketio 也没有收到来自 javascript 的任何消息

javascript - 等到所有 jQuery Ajax 请求完成?

javascript - 'keyup' 事件的更好替代方案

javascript - Angular 路由导致 IE 死循环

json - 如何使Flask解析已发布JSON数据中的数字?

python-2.7 - 如何使用 HTTPS 在 CherryPy WSGI 服务器 (Cheroot) 上运行 Flask 应用程序?

javascript - PHP 生成的选项列表仅出现在第一个 Ajax 动态生成的容器上