본문 바로가기

Web

Django + rest framework를 이용한 안드로이드 JSON 활용방법


웹 서비스를 개발하면서, 모바일용으로 앱을 개발해서 서비스의 확장성을 가지려고 한다.


현재 개발하고 있는 웹 서비스는 Django 1.5.1이고, 여기에 rest-framework를 설치하여 간단하게 JSON으로 만들어서 모바일에서 활용할 수 있도록 하였다.


어떻게?



1. DJANGO REST FRAMEWORK를 설치하고 기본적인 설정을 해준다.


http://django-rest-framework.org/


설치하는 방법과 설정 방법은 위 사이트에 잘 설명되어 있다.(http://django-rest-framework.org/#installation)



2. 이미 만들어 놓은 DJANGO App이 있다면, 그 앱 폴더에 serializers.py 파일 생성하고


아래와 같이 간단하게 모델을 연결시킨다.


#-*- coding:utf-8 -*-

from rest_framework import serializers

from models import TestModel



class TestSerializer(serializers.ModelSerializer):

    

    class Meta:

        model = TestModel

        fields = ('Name', 'Description','Thumbnail')



3. urls.py에 아래와 비슷한 형식으로 삽입


...

url(r'^test/$', test_list),

...



4. views.py에 아래처럼 작성.


from rest_framework.renderers import UnicodeJSONRenderer

from django.http import HttpResponse

from serializers import TestSerializer

from rest_framework.response import Response

from rest_framework.decorators import api_view

from rest_framework import status


class JSONResponse(HttpResponse):

    

    def __init__(self, data, **kwargs):

        content = UnicodeJSONRenderer().render(data, 'application/json; indent=4')

        kwargs['content_type'] = 'application/json'

        super(JSONResponse, self).__init__(content, **kwargs)



@api_view(['GET','POST'])

def test_list(request, format=None):

    

    if request.method == 'GET':

        packages = TestModel.objects.all()

        serializer = TestSerializer(packages, many=True)

        return JSONResponse(serializer.data)


...(중요하지 않은 부분 생략)..



5. 이제 테스트만 하면 된다.


웹 브라우저에서나 curl을 이용하면 된다.


curl http://127.0.0.1:8000/test/


JSON포맷으로 응답이 올것이다.






[참고사항]


DB와 연동을 하는 부분에서 인코딩은 참 신경이 쓰인다. 그래서, 모두 UTF-8을 기준으로 한다.

MySQL 서버도 데이터베이스를 생성할때 utf8로 character set을 설정하도록 하고, rest framework에서도 한글을 사용하기 위해서 JSONRenderer가 아닌 UnicodeJSONRenderer를 사용하도록 한다. 그래야 한글이 정상적으로 나오게 된다.