Post 在 angular/tornado 网站请求

Post request in angular/tornado website

我在发出 post 请求时遇到问题。当用户尝试提交表单时,以下代码失败,tornado handler.get_argument('login') 和 handler.get_argument('password') 都 return None,而我清楚地发送了那些数据。更有趣的是,当我将方法从 post 更改为 get 时,一切正常。如何使其也适用于 post 请求?

//angular js
angular.module('playItApp', ['playItControllers', 'playItServices']);

angular.module('playItServices', ['ngResource'])
    .factory('users', ['$resource', function($resource){
        return $resource('/api/user');
    }]);

angular.module('playItControllers', [])
    .controller('authentication', ['users', function(users){
        this.register = function(){
            users.save({'login': this.login, 'password': this.password});
        };
    }]);

# tornado handler
class User(JsonHandler):
    def post(self):
        login = self.get_argument('login')
        password = self.get_argument('password')
        user = self.db.create_user(login, password)
        self.set_secure_cookie('user', str(user['id']))
        self.write(user)

<div ng-controller="authentication as authentication">
    <h2>Registration</h2>
    <form>
        <input type="text" placeholder="login" ng-model="authentication.login">
        <input type="password" placeholder="password" ng-model="authentication.password">
        <button ng-click="authentication.register()">Register</button>
    </form>
</div>

Angular(可能)将 POST 数据作为 JSON 发送,但 get_argument 用于表单编码数据。如果您想坚持使用 JSON,则必须使用 json.loads(self.request.body) 而不是 get_argument,或者您应该能够使用 Angular 来发送表单编码数据.如果您关心与非 javascript 客户端的兼容性,您可能希望切换到表单编码数据,但如果您愿意使用 javascript,那么使用 JSON 可能是更好的选择.