Django-rest-framework: JSONRenderer๋Š” `data=None`์ผ ๋•Œ ์œ ํšจํ•œ json ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 06์›” 13์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: encode/django-rest-framework

์žฌํ˜„ ๋‹จ๊ณ„

@permission_classes((AllowAny, ))
class Viewset(viewsets.ViewSet):
    renderer_classes = (JSONRenderer, )
    def list(self, request, *args, **kwargs):
        return Response()

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™

null ๋˜๋Š” {} ์™€ ๊ฐ™์€ ์œ ํšจํ•œ json ์‘๋‹ต ๋ณธ๋ฌธ

์‹ค์ œ ํ–‰๋™

Content-Type ํ—ค๋” ์„ธํŠธ๊ฐ€ ์—†๊ณ  ๋นˆ ์‘๋‹ต์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ํŠนํžˆ jquery์˜ ajax() ์š”์ฒญํ•  ๋•Œ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ๊ตฌ๋ฌธ ๋ถ„์„ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ๋นˆ ๋ณธ๋ฌธ์ด ์žˆ๋Š” ์„ฑ๊ณต ์‘๋‹ต์— ๋Œ€ํ•œ ์•ฝ์†์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค https://stackoverflow.com/a/6186905

์—ฌ๊ธฐ ํ™๋ณด: https://github.com/encode/django-rest-framework/pull/6027

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Content-Type ํ—ค๋”๊ฐ€ ๋นˆ ๋ Œ๋”๋Ÿฌ ์‘๋‹ต์—์„œ ์‚ญ์ œ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๋ผ์ธ 80).
https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72

๋ชจ๋“  4 ๋Œ“๊ธ€

๊ฐ„๋‹จํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์„ค์ •์„ ๋‹ค์‹œ ์ƒ์„ฑํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋น ๋ฅธ ์ˆ˜๋™ ํ…Œ์ŠคํŠธ๋Š” Content-Type ํ—ค๋”๊ฐ€ application/json ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์—ˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋นˆ ์‘๋‹ต์— ๊ด€ํ•ด์„œ๋Š” @kltdwrds์— ๋™์˜ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์–‘์ด ๋นˆ ๋ณธ๋ฌธ์„ ํ—ˆ์šฉํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ JavaScript์˜ JSON.parse ์™€ Python์˜ json.loads ๋นˆ ๋ฌธ์ž์—ด์„ ๋””์ฝ”๋”ฉํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, data=None ๋Š” null ๋กœ ์ธ์ฝ”๋”ฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋ฉด ํ˜„์žฌ์˜ ํ–‰๋™์ด ์ดํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. JSON.parse ๋ฐ json.loads ๋Š” ์‹คํŒจํ•˜์ง€๋งŒ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ธฐ ์ „์— ์ฝ˜ํ…์ธ  ์œ ํ˜•์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ์˜ ์ฑ…์ž„์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์žˆ๋‹ค๋ฉด ์ด๊ฒƒ์€ jQuery์˜ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค.

ํ  ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š”

from rest_framework import viewsets
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response

Content-Type ํ—ค๋”๊ฐ€ ์–ด๋””์—์„œ ์„ค์ •๋˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์œ„์˜ ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‘๋‹ต์—์„œ ๋ˆ„๋ฝ๋˜์—ˆ์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

Content-Type ํ—ค๋”๊ฐ€ ๋นˆ ๋ Œ๋”๋Ÿฌ ์‘๋‹ต์—์„œ ์‚ญ์ œ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๋ผ์ธ 80).
https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72

return Response() ๋Œ€ํ•œ ํ˜„์žฌ ๋™์ž‘์€ ์˜๋„์ ์ž…๋‹ˆ๋‹ค. null ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ๋„ ์œ ํšจํ•˜์ง€๋งŒ ๋‚ด์šฉ ์œ ํ˜•์ด ์—†๋Š” ๋นˆ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ ๊ฒƒ์ด ๋” ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๋‘๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰