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 可能是更好的选择.
我在发出 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 可能是更好的选择.