python - 未提供异常消息(Django REST POST)

标签 python django rest django-rest-framework

我正在使用 Django 1.6 和 Django REST Framework。

我有一个非常简单的观点。出于演示目的,我希望它在收到 GET 请求时返回所有用户的电子邮件地址,并在收到 POST 请求时返回所有用户的电子邮件地址。

这是我正在使用的代码:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import authentication, permissions
from core import models

class ListUsers(APIView):
    def get(self, request, format=None):
        usernames = [user.email for user in models.User.objects.all()]
        return Response(usernames)

    def post(self, request):
        usernames = [user.email for user in models.User.objects.all()]
        return Response(usernames)

当我执行 GET 时,它工作正常,但是当我执行 POST 时,我收到此错误: 未提供异常消息

我无法弄清楚问题是什么,我已经尝试了我能想到的一切,我已经搜索了 Django REST Framework 文档,但找不到任何内容。

非常感谢任何帮助。提前致谢。

更新 根据要求进行堆栈跟踪: 环境:

Request Method: POST
Request URL: http://localdev:1989/api/rest/v1/register

Django Version: 1.6
Python Version: 2.7.3
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'rest_framework',
 'core',
 'apiv1')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:

File "/usr/local/virtualenvs/wedding/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  139.                 response = response.render()
File "/usr/local/virtualenvs/wedding/local/lib/python2.7/site-packages/django/template/response.py" in render
  105.             self.content = self.rendered_content
File "/usr/local/virtualenvs/wedding/local/lib/python2.7/site-packages/rest_framework/response.py" in rendered_content
  59.         ret = renderer.render(self.data, media_type, context)
File "/usr/local/virtualenvs/wedding/local/lib/python2.7/site-packages/rest_framework/renderers.py" in render
  577.         context = self.get_context(data, accepted_media_type, renderer_context)
File "/usr/local/virtualenvs/wedding/local/lib/python2.7/site-packages/rest_framework/renderers.py" in get_context
  554.             'post_form': self.get_rendered_html_form(view, 'POST', request),
File "/usr/local/virtualenvs/wedding/local/lib/python2.7/site-packages/rest_framework/renderers.py" in get_rendered_html_form
  423.             data = request.DATA
File "/usr/local/virtualenvs/wedding/local/lib/python2.7/site-packages/rest_framework/request.py" in DATA
  197.             self._load_data_and_files()
File "/usr/local/virtualenvs/wedding/local/lib/python2.7/site-packages/rest_framework/request.py" in _load_data_and_files
  267.             self._data, self._files = self._parse()
File "/usr/local/virtualenvs/wedding/local/lib/python2.7/site-packages/rest_framework/request.py" in _parse
  359.         parsed = parser.parse(stream, media_type, self.parser_context)
File "/usr/local/virtualenvs/wedding/local/lib/python2.7/site-packages/rest_framework/parsers.py" in parse
  63.             raise ParseError('JSON parse error - %s' % six.text_type(exc))

Exception Type: ParseError at /api/rest/v1/register
Exception Value: 

我发现这是由于提交了错误的 JSON 造成的。例如,如果我有一个额外的逗号。如何使其返回错误消息而不是 500 错误?

更新2 发布数据:

{
 "email": "my@email.com",
 "full_name": "mark winterbottom",
 "password": "2secure4u",
}

最佳答案

如果您想要通用错误页面,您应该能够设置 handler500 url handler在你的urls.py中。我还注意到您不接受 post 方法的 kwarg 格式。您可能想将其添加到其中。

另一种可能性是覆盖 dispatch View 类的方法并捕获异常,la:

class ListUsers(APIView):
    def dispatch(self, *args, **kwargs):
        try:
            return super(ListUsers, self).dispatch(*args, **kwargs)
        except ParseError:
            pass
            # Show an error page

    def get(self, request, format=None):
        usernames = [user.email for user in models.User.objects.all()]
        return Response(usernames)

    def post(self, request):
        usernames = [user.email for user in models.User.objects.all()]
        return Response(usernames)

关于python - 未提供异常消息(Django REST POST),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20438897/

相关文章:

python - 使用 Mayavi/Python 从数据中绘制 3D 等高线图

django-social-auth : logging in from a unit test client

django - 在 Django 中,如何在进行任何验证之前计算或更新某些模型字段?

php - 使用curl为GET方法添加变量

javascript - REST路由多个文件 Node js

Javascript/Python 字符 ASCII 检查

python - 编写了一个按键监听器,但它执行了两次

python - 为什么在我的 32 位服务器中,Python 的 ESP 比 EBP 大?

python - 模板中的 Django substr/substring

django - 如何将Haystack与Django Rest Framework集成以制作GET REST API进行搜索?