Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
django-rest-framework
Commits
90fe0fb8
Commit
90fe0fb8
authored
Jul 23, 2015
by
Tom Christie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Errors in browsable API on error. Closes #3024.
parent
6e6fa893
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
30 additions
and
3 deletions
+30
-3
rest_framework/exceptions.py
+9
-2
rest_framework/serializers.py
+1
-1
tests/test_generics.py
+20
-0
No files found.
rest_framework/exceptions.py
View file @
90fe0fb8
...
...
@@ -14,6 +14,7 @@ from django.utils.translation import ugettext_lazy as _
from
django.utils.translation
import
ungettext
from
rest_framework
import
status
from
rest_framework.utils.serializer_helpers
import
ReturnDict
,
ReturnList
def
_force_text_recursive
(
data
):
...
...
@@ -22,14 +23,20 @@ def _force_text_recursive(data):
lazy translation strings into plain text.
"""
if
isinstance
(
data
,
list
):
ret
urn
[
ret
=
[
_force_text_recursive
(
item
)
for
item
in
data
]
if
isinstance
(
data
,
ReturnList
):
return
ReturnList
(
ret
,
serializer
=
data
.
serializer
)
return
data
elif
isinstance
(
data
,
dict
):
ret
urn
dict
([
ret
=
dict
([
(
key
,
_force_text_recursive
(
value
))
for
key
,
value
in
data
.
items
()
])
if
isinstance
(
data
,
ReturnDict
):
return
ReturnDict
(
ret
,
serializer
=
data
.
serializer
)
return
data
return
force_text
(
data
)
...
...
rest_framework/serializers.py
View file @
90fe0fb8
...
...
@@ -204,7 +204,7 @@ class BaseSerializer(Field):
self
.
_errors
=
{}
if
self
.
_errors
and
raise_exception
:
raise
ValidationError
(
self
.
_
errors
)
raise
ValidationError
(
self
.
errors
)
return
not
bool
(
self
.
_errors
)
...
...
tests/test_generics.py
View file @
90fe0fb8
...
...
@@ -145,6 +145,16 @@ class TestRootView(TestCase):
created
=
self
.
objects
.
get
(
id
=
4
)
self
.
assertEqual
(
created
.
text
,
'foobar'
)
def
test_post_error_root_view
(
self
):
"""
POST requests to ListCreateAPIView in HTML should include a form error.
"""
data
=
{
'text'
:
'foobar'
*
100
}
request
=
factory
.
post
(
'/'
,
data
,
HTTP_ACCEPT
=
'text/html'
)
response
=
self
.
view
(
request
)
.
render
()
expected_error
=
'<span class="help-block">Ensure this field has no more than 100 characters.</span>'
self
.
assertIn
(
expected_error
,
response
.
rendered_content
)
EXPECTED_QUERIES_FOR_PUT
=
3
if
django
.
VERSION
<
(
1
,
6
)
else
2
...
...
@@ -282,6 +292,16 @@ class TestInstanceView(TestCase):
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_404_NOT_FOUND
)
self
.
assertFalse
(
self
.
objects
.
filter
(
id
=
999
)
.
exists
())
def
test_put_error_instance_view
(
self
):
"""
Incorrect PUT requests in HTML should include a form error.
"""
data
=
{
'text'
:
'foobar'
*
100
}
request
=
factory
.
put
(
'/'
,
data
,
HTTP_ACCEPT
=
'text/html'
)
response
=
self
.
view
(
request
,
pk
=
1
)
.
render
()
expected_error
=
'<span class="help-block">Ensure this field has no more than 100 characters.</span>'
self
.
assertIn
(
expected_error
,
response
.
rendered_content
)
class
TestFKInstanceView
(
TestCase
):
def
setUp
(
self
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment