【问题标题】:No JSON object could be decoded - Django request.body无法解码任何 JSON 对象 - Django request.body
【发布时间】:2017-02-26 00:44:38
【问题描述】:

我正在制作用于从智能手机发布 cmets 的网络服务,以下是我的代码

@api_view(['POST'])
def comment_post(request,newsId=None):
    data = json.loads(request.body)
    responseData= dict({
       "result": list()
       })
    if(newsId):
        commentNews  = models.Comments.objects.create()
        commentNews.comment_description = data.get('comment_description').strip()
        commentNews.like_count = int(data.get('like_count'))
        commentNews.user_name = data.get('user_name').strip()
        commentNews.user_email_id = data.get('user_email_id').strip()
        commentNews.parent_comment = data.get('parent_comment').strip()
        commentNews.save()
        subscribed_user = models.SubscribedUsers.objects.create(username=data.get('user_name').strip(),email=data.get('user_email_id').strip())
        news = models.News.objects.get(id=int(newsId))
        news.comments.add(commentNews)
        data ={
         'status':'success'
         }
    else:
        data ={
        'status':'failure'
        }
    responseData['result'].append(data)
    return Response(responseData,status=status.HTTP_200_OK) 

每当我在本地检查它时它都可以工作,但在服务器端它会给我以下错误

ValueError at /service/comment_post/369

No JSON object could be decoded

Request Method:     POST
Request URL:    http://dev.newskhabari.com/service/comment_post/369
Django Version:     1.9.5
Exception Type:     ValueError
Exception Value:    

No JSON object could be decoded

Exception Location:     /usr/local/lib/python2.7/json/decoder.py in raw_decode, line 383
Python Executable:  /var/www/vhosts/newskhabari.com/newskhabari_dev/newskhabari-app-venv/bin/python
Python Version:     2.7.6
Python Path:    

['/var/www/vhosts/newskhabari.com/newskhabari_dev/newskhabari-app-venv/lib/python2.7/site-packages',
 '/var/www/vhosts/newskhabari.com/newskhabari_dev/newskhabari-app-venv/lib/python2.7/site-packages/django',
 '/var/www/vhosts/newskhabari.com/newskhabari_dev/newskhabari-app-venv/bin',
 '/var/www/vhosts/newskhabari.com/newskhabari_dev',
 '/usr/local/rvm/gems/ruby-2.2.2/gems/passenger-5.0.30/src/helper-scripts',
 '/var/www/vhosts/newskhabari.com/newskhabari_dev/newskhabari-app-venv/lib/python27.zip',
 '/var/www/vhosts/newskhabari.com/newskhabari_dev/newskhabari-app-venv/lib/python2.7',
 '/var/www/vhosts/newskhabari.com/newskhabari_dev/newskhabari-app-venv/lib/python2.7/plat-linux2',
 '/var/www/vhosts/newskhabari.com/newskhabari_dev/newskhabari-app-venv/lib/python2.7/lib-tk',
 '/var/www/vhosts/newskhabari.com/newskhabari_dev/newskhabari-app-venv/lib/python2.7/lib-old',
 '/var/www/vhosts/newskhabari.com/newskhabari_dev/newskhabari-app-venv/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7',
 '/usr/local/lib/python2.7/plat-linux2',
 '/usr/local/lib/python2.7/lib-tk',
 '/var/www/vhosts/newskhabari.com/newskhabari_dev/newskhabari-app-venv/lib/python2.7/site-packages',
 '/var/www/vhosts/newskhabari.com/newskhabari_dev',
 '/var/www/vhosts/newskhabari.com/newskhabari_dev/app']

Server time:    Mon, 17 Oct 2016 11:35:36 +0530

我无法弄清楚为什么它给 异常值:无法解码 JSON 对象

【问题讨论】:

  • 我认为你不必在rest框架中做json.loads bcz,你可以通过json格式的request.data访问。试试看

标签: python json django python-2.7


【解决方案1】:

我猜,您使用的是django-rest-framework。所以,你不必做json.loads(),因为django-rest-frameworkPOST 请求提供request.data,为request.query_params 提供GET 请求,已经以json 格式解析

所以我认为这应该适合你。

@api_view(['POST'])
def comment_post(request,newsId=None):
responseData= dict({
   "result": list()
   })
if(newsId):
    commentNews  = models.Comments.objects.create()
    commentNews.comment_description = request.data.get('comment_description').strip()
    commentNews.like_count = int(request.data.get('like_count'))
    commentNews.user_name = request.data.get('user_name').strip()
    commentNews.user_email_id = request.data.get('user_email_id').strip()
    commentNews.parent_comment = request.data.get('parent_comment').strip()
    commentNews.save()
    subscribed_user = models.SubscribedUsers.objects.create(username=request.data.get('user_name').strip(),email=request.data.get('user_email_id').strip())
    news = models.News.objects.get(id=int(newsId))
    news.comments.add(commentNews)
    data ={
     'status':'success'
     }
else:
    data ={
    'status':'failure'
    }
responseData['result'].append(data)
return Response(responseData,status=status.HTTP_200_OK) 

更多信息请阅读docs here

【讨论】:

  • 它适用于本地,但每当我将它发布到服务器时它就不起作用。
  • 它在下面显示错误 TypeError at /service/comment_post/369 int() 参数必须是字符串或数字,而不是 'NoneType' 请求方法:POST 请求 URL:dev.newskhabari.com/service/comment_post/369 Django 版本:1.9 .5 异常类型:TypeError 异常值:int() 参数必须是字符串或数字,而不是“NoneType”异常位置:/var/www/vhosts/newskhabari.com/newskhabari_dev/app/mediapublisher/apps/mediapublisher/views /restViews/restViews.py 在comment_post,第167行
  • 在 request.data 它给出 { "comment_description":"yyyy", "like_count": "1", "user_name":"ooo", "user_email_id":"iiii@webmail.com" , "parent_comment":"1" } 正如我为它发布的那样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多