在角/龙卷风网站发布请求

时间:2015-04-26 11:00:30

标签: angularjs tornado

我发帖子请求有问题。当用户尝试提交表单时,下面的代码失败,tornado handler.get_argument(' login')和handler.get_argument('密码')都返回None,而我清楚地发送这些数据。更有趣的是,当我将方法从post更改为get时,一切正常。如何使它也适用于帖子请求?

//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>

1 个答案:

答案 0 :(得分:3)

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