我正在向我的服务器发送POST请求,当我的服务器代码尝试从POST请求中读取数据时,该请求会抛出500错误。但数据看起来对我来说完全没问题。
POST数据是:
<QueryDict: {u'{"firstname":"jack","lastname":"rowley","username":"jack","email":"info@mybiz.co.uk","password":"jack","city":"London","country":"UK","photo":"","genre1":"Comedy","genre2":"Horror","genre3":"Documentary","platform":"Cinema"}': [u'']}>
正在读取POST数据的Python代码是:
username = request.POST['username']
password = request.POST['password']
email = request.POST['email']
它在第一行失败,试图访问用户名。
发出POST请求的AngularJS代码如下所示:
url = apiDomain + '/profile/register/';
var fn = 'jack';
var ln = 'rowley';
var un = 'jack';
var pw = 'jack';
var cf = 'jack';
var em = 'info@mybiz.co.uk';
var lc = 'London';
var ct = 'UK';
var ph = ''; //$('#photo_set').val();
var genre1 = 'Comedy';
var genre2 = 'Horror';
var genre3 = 'Documentary';
var platform = 'Cinema';
return $http({
method: 'POST',
url: url,
headers: {
'Content-Type': "application/x-www-form-urlencoded"
},
data: {
firstname: fn,
lastname: ln,
username: un,
email: em,
password: pw,
city: lc,
country: ct,
photo: ph,
genre1: genre1,
genre2: genre2,
genre3: genre3,
platform: platform
}
}).then(function successCallback(response) {
return response;
}, function errorCallback(response) {
return -1;
});
答案 0 :(得分:3)
您正尝试访问此数据,就像它是表单编码一样。它不是;它是JSON。
您需要访问原始帖子正文,并从JSON解码。
data = json.loads(request.body)
username = data['username']
password = data['password']
email = data['email']
答案 1 :(得分:1)
您收到KeyError是因为您没有用户名。
您的查询字典不是字典。它是一个单项字符串键,带有空字符串值。密钥碰巧是一些url编码字符串的字符串编码。看看它。
MethodBase.GetCurrentMethod().DeclaringType.FullName + "." + MethodBase.GetCurrentMethod().Name;
您正在传递一个URL编码的字符串,您应该传递一个字典,可能是在客户端。