2015-04-26 57 views
2

我有發帖請求的問題。當用戶嘗試提交表單時,下面的代碼失敗,tornado handler.get_argument('login')和handler.get_argument('password')都返回None,而我明確發送這些數據。更有趣的是,當我改變方法從發佈到獲取時,一切正常。如何使它也適用於發佈請求?角度/龍捲風網站中的發佈請求

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

回答

3

Angular(可能)將POST數據作爲JSON發送,但get_argument用於表單編碼數據。如果您想堅持使用JSON,則必須使用json.loads(self.request.body)而不是get_argument,否則您應該能夠讓Angular發送表單編碼的數據。如果您關心與非JavaScript客戶端的兼容性,您可能需要切換到表單編碼數據,但如果您需要JavaScript,那麼使用JSON可能是更好的選擇。