Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit803e089

Browse files
committed
support django 2.1 test client json data automatically serialized
1 parent4296189 commit803e089

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

‎rest_framework/test.py‎

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,14 +152,19 @@ def _encode_data(self, data, format=None, content_type=None):
152152
Encode the data returning a two tuple of (bytes, content_type)
153153
"""
154154

155-
ifdataisNone:
156-
return ('',content_type)
157-
158155
assertformatisNoneorcontent_typeisNone, (
159156
'You may not set both `format` and `content_type`.'
160157
)
161158

162159
ifcontent_type:
160+
try:
161+
data=self._encode_json(data,content_type)
162+
exceptAttributeError:
163+
pass
164+
165+
ifdataisNone:
166+
data=''
167+
163168
# Content type specified explicitly, treat data as a raw bytestring
164169
ret=force_bytes(data,settings.DEFAULT_CHARSET)
165170

@@ -177,7 +182,6 @@ def _encode_data(self, data, format=None, content_type=None):
177182

178183
# Use format and render the data into a bytestring
179184
renderer=self.renderer_classes[format]()
180-
ret=renderer.render(data)
181185

182186
# Determine the content-type header from the renderer
183187
content_type=renderer.media_type
@@ -186,6 +190,11 @@ def _encode_data(self, data, format=None, content_type=None):
186190
content_type,renderer.charset
187191
)
188192

193+
ifdataisNone:
194+
ret=''
195+
else:
196+
ret=renderer.render(data)
197+
189198
# Coerce text to bytes if required.
190199
ifisinstance(ret,str):
191200
ret=ret.encode(renderer.charset)

‎tests/test_testing.py‎

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
fromdjango.testimportTestCase,override_settings
1010
fromdjango.urlsimportpath
1111

12-
fromrest_frameworkimportfields,serializers
12+
fromrest_frameworkimportfields,parsers,serializers
1313
fromrest_framework.authtoken.modelsimportToken
14-
fromrest_framework.decoratorsimportapi_view
14+
fromrest_framework.decoratorsimportapi_view,parser_classes
1515
fromrest_framework.responseimportResponse
1616
fromrest_framework.testimport (
1717
APIClient,APIRequestFactory,URLPatternsTestCase,force_authenticate
@@ -51,6 +51,12 @@ class BasicSerializer(serializers.Serializer):
5151
flag=fields.BooleanField(default=lambda:True)
5252

5353

54+
@api_view(['POST'])
55+
@parser_classes((parsers.JSONParser,))
56+
defpost_json_view(request):
57+
returnResponse(request.data)
58+
59+
5460
@api_view(['POST'])
5561
defpost_view(request):
5662
serializer=BasicSerializer(data=request.data)
@@ -63,7 +69,8 @@ def post_view(request):
6369
path('session-view/',session_view),
6470
path('redirect-view/',redirect_view),
6571
path('redirect-view/<int:code>/',redirect_307_308_view),
66-
path('post-view/',post_view)
72+
path('post-json-view/',post_json_view),
73+
path('post-view/',post_view),
6774
]
6875

6976

@@ -237,6 +244,17 @@ def test_empty_post_uses_default_boolean_value(self):
237244
assertresponse.status_code==200
238245
assertresponse.data== {"flag":True}
239246

247+
deftest_post_encodes_data_based_on_json_content_type(self):
248+
data= {'data':True}
249+
response=self.client.post(
250+
'/post-json-view/',
251+
data=data,
252+
content_type='application/json'
253+
)
254+
255+
assertresponse.status_code==200
256+
assertresponse.data==data
257+
240258

241259
classTestAPIRequestFactory(TestCase):
242260
deftest_csrf_exempt_by_default(self):

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp