Django在读取POST数据时抛出500错误

时间:2015-10-08 15:36:53

标签: python angularjs django post

我正在向我的服务器发送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;
      });

2 个答案:

答案 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编码的字符串,您应该传递一个字典,可能是在客户端。