龙卷风发布请求:缺少参数

时间:2017-07-31 12:07:50

标签: post arguments tornado

我正在使用龙卷风来构建一个Web服务器,现在我正在创建一个登录模块。这是代码:

T[]

后端部分:

T

当我进行测试时,我可以看到<body> <form id="uploadForm"> <div class="form-group"> <label for="exampleInputEmail1">Email address</label> <input name="name" type="email" class="form-control" id="exampleInputEmail1" placeholder="Email"> </div> <div class="form-group"> <label for="exampleInputPassword1">Password</label> <input name="password" type="password" class="form-control" id="exampleInputPassword1" placeholder="Password"> </div> <button id="submit" type="button" class="btn btn-default">Submit</button> </form> </body> <script src="../js/plugins/jquery-3.2.1.min.js?v=c9f5aeeca3"></script> <script src="../js/common/bootstrap.min.js?v=5869c96cc8"></script> <script> $(function(){ $('#submit').on('click',function(){ $.ajax({ url: 'http://www.example.com/login', method: 'POST', data: $('#uploadForm').serialize(), contentType: false, processData: false, cache: false, success: function(data) { console.log(data); if( data === 'ERROR'){ alert('login failed') }else{ location.href = data; } }, error: function (jqXHR) { alert('ERROR'); } }); }); }); </script> 给了我结果:class LoginHandler(tornado.web.RequestHandler): def post(self, path): try: print(self.request.body) name = self.get_body_argument("name") except Exception as e: print(e) 但之后我得到了一个例外:

  

HTTP 400:错误请求(缺少参数名称)

print(self.request.body)就在http体内,但为什么它告诉我缺少参数名称?

1 个答案:

答案 0 :(得分:1)

Tornado仅支持“application / x-www-form-urlencoded”和“multipart / form-data”作为内容类型。因此,当我们向服务器发送post请求时,我们必须使用正确的contentType发送请求。例如,

$.ajax({
            url: 'http://www.example.com/login',
            method: 'POST',
            data: $('#uploadForm').serialize(),
            contentType: 'application/x-www-form-urlencoded',
            processData: false,
            ...

此外,我们可以忽略ajax中的contentType,因为'application/x-www-form-urlencoded'默认设置。