Сообщение об исключении не предоставлено (Django REST POST)

Я использую 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, я получаю эту ошибку: No exception message supplied

Я не могу понять, в чем проблема, я перепробовал все, что мог придумать, я просмотрел документацию по 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 POST-данные:

{
 "email": "[email protected]",
 "full_name": "mark winterbottom",
 "password": "2secure4u",
}

person LondonAppDev    schedule 07.12.2013    source источник
comment
Предоставьте полную трассировку стека, пожалуйста..   -  person mariodev    schedule 07.12.2013
comment
@mariodev Я добавил трассировку ударов. Спасибо.   -  person LondonAppDev    schedule 12.12.2013
comment
Можете ли вы показать, как вы отправляете данные от своего клиента, чтобы мы могли хотя бы воспроизвести ошибку.   -  person mariodev    schedule 12.12.2013
comment
Конечно @mariodev. Спасибо :)   -  person LondonAppDev    schedule 12.12.2013
comment
Я не могу воспроизвести ту же ошибку. У вас есть какие-то дополнительные настройки, какой клиент вы используете?   -  person mariodev    schedule 12.12.2013


Ответы (1)


Если вам нужна общая страница ошибок, вы должны иметь возможность установить обработчик URL-адресов handler500 в файле urls.py. Я также заметил, что вы не принимаете формат kwarg для метода post. Вы могли бы добавить это туда.

Другой возможностью было бы переопределить ссылку отправить метод класса представления и перехватить там исключение, а-ля:

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)
person Matt Williamson    schedule 11.12.2013