관리 메뉴

AI 세상 ?

[Django REST framework]Quickstart 본문

Development/Django

[Django REST framework]Quickstart

phpdoumi 2017. 3. 9. 22:41

### 안되는 영어로 구글 번역하며 보고 있습니다. 원본은 http://www.django-rest-framework.org/tutorial/quickstart/ 입니다. ###

Quickstart

관리자가 시스템의 사용자와 그룹을 보고 편집할 있도록 간단한 API 만들 계획입니다.

Project setup

tutorial이라는 새로운 Django 프로젝트를 만든 다음, quickstart라는 새로운 앱을 시작합니다.

# Create the project directory

mkdir tutorial

cd tutorial

 

# Create a virtualenv to isolate our package dependencies locally

virtualenv env

source env/bin/activate  # On Windows use `env\Scripts\activate`

 

# Install Django and Django REST framework into the virtualenv

pip install django

pip install djangorestframework

 

# Set up a new project with a single application

django-admin.py startproject tutorial .  # Note the trailing '.' character

cd tutorial

django-admin.py startapp quickstart

cd ..

이제 데이터베이스를 동기화합니다.

python manage.py migrate

우리는 password1234라는 암호를 가진 admin이라는 초기 사용자를 생성할 것입니다. 예에서 나중에 해당 사용자로 인증합니다.

python manage.py createsuperuser

일단 데이터베이스를 만들고 초기 사용자를 생성하고 준비가 되면, 앱의 디렉토리를 열면 코딩이 시작됩니다.

Serializers

먼저 약긴의 serializers 정의할 것입니다. 데이터 표현을 위해 사용할 tutorial/quickstart/serializers.py라는 모듈을 만들어 보겠습니다.

from django.contrib.auth.models import User, Group

from rest_framework import serializers

 

 

class UserSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:

        model = User

        fields = ('url', 'username', 'email', 'groups')

 

 

class GroupSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:

        model = Group

        fields = ('url', 'name')

HyperlinkedModelSerializer 사용하여 하이퍼 링크된 릴레이션을 사용하고 있습니다. 기본 키와 다양한 다른 관계를 사용할 수도 있지만 하이퍼 링크는 좋은 RESTful 설계입니다.

Views

맞아, 우리는 가지 견해를 적어 두는 편이 나을 것입니다. tutorial/quickstart/views.py 열고, 타이핑을 하십시요.

from django.contrib.auth.models import User, Group

from rest_framework import viewsets

from tutorial.quickstart.serializers import UserSerializer, GroupSerializer

 

 

class UserViewSet(viewsets.ModelViewSet):

    """

    API endpoint that allows users to be viewed or edited.

    """

    queryset = User.objects.all().order_by('-date_joined')

    serializer_class = UserSerializer

 

 

class GroupViewSet(viewsets.ModelViewSet):

    """

    API endpoint that allows groups to be viewed or edited.

    """

    queryset = Group.objects.all()

    serializer_class = GroupSerializer

여러 개의 뷰를 작성하는 대신에, 모든 공통적인 행동을 ViewSets라는 클래스에 그룹화합니다.

필요하다면, 이들을 개별 뷰로 쉽게 분할할 있지만 세트를 사용하면 논리를 매우 간결하게 유지할 있을 아니라 매우 간결하게 유지할 있습니다.

URLs

이제 API URL 연결해 보겠습니다. tutorial/urls.py 안에,

from django.conf.urls import url, include

from rest_framework import routers

from tutorial.quickstart import views

 

router = routers.DefaultRouter()

router.register(r'users', views.UserViewSet)

router.register(r'groups', views.GroupViewSet)

 

# Wire up our API using automatic URL routing.

# Additionally, we include login URLs for the browsable API.

urlpatterns = [

    url(r'^', include(router.urls)),

    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))

]

views 대신에 viewsets 사용하기 때문에, 집합을 라우터 클래스에 등록하기만 하면 API URL conf 자동으로 생성할 있습니다.

API URL 많이 제어해야 한다면, 일반 class-based view 사용하고 명시적으로 URL conf 작성할 있습니다.

마지막으로, browsable API 함께 사용하기 위한 default login logout view 포함합니다. 선택 사항이지만 API 인증이 필요하고 browsable API 사용하려는 경우 유용합니다.

Settings

또한 가지 전역 설정을 지정하려고 합니다. Pagination 사용하고 싶고, 우리는 API 관리자만 액세스할 있기를 원합니다. 설정 모듈은 tutorial/settings.py 있습니다.

INSTALLED_APPS = (

    ...

    'rest_framework',

)

 

REST_FRAMEWORK = {

    'DEFAULT_PERMISSION_CLASSES': [

        'rest_framework.permissions.IsAdminUser',

    ],

    'PAGE_SIZE': 10

}

좋아, 끝났어.


Testing our API

이제 우리가 만든 API 테스트할 준비가 되었습니다. Command line에서 서버를 시작하자.

python manage.py runserver

우리는 command line에서부터 curl 같은 툴을 사용하여 API 액세스할 있습니다.

bash: curl -H 'Accept: application/json; indent=4' -u admin:password123 http://127.0.0.1:8000/users/

{

    "count": 2,

    "next": null,

    "previous": null,

    "results": [

        {

            "email": "admin@example.com",

            "groups": [],

            "url": "http://127.0.0.1:8000/users/1/",

            "username": "admin"

        },

        {

            "email": "tom@example.com",

            "groups": [                ],

            "url": "http://127.0.0.1:8000/users/2/",

            "username": "tom"

        }

    ]

}

또는 httpie command line 사용하여,

bash: http -a admin:password123 http://127.0.0.1:8000/users/

 

HTTP/1.1 200 OK

...

{

    "count": 2,

    "next": null,

    "previous": null,

    "results": [

        {

            "email": "admin@example.com",

            "groups": [],

            "url": "http://localhost:8000/users/1/",

            "username": "paul"

        },

        {

            "email": "tom@example.com",

            "groups": [                ],

            "url": "http://127.0.0.1:8000/users/2/",

            "username": "tom"

        }

    ]

}

또는 직접적으로 브라우저를 통해 URL http://127.0.0.1:8000/users/ 이동하자.

Quick start image

브라우저에서 작업하는 경우, 오른쪽 상단의 컨트롤을 사용하여 로그인해야 합니다.

멋졌습니다.

REST framework 함께 어울리는 방법에 대한 깊이 있는 이래를 원한다면 tutorial API 가이드를 살펴보기 바란다.

'Development > Django' 카테고리의 다른 글

[Django REST Framework] Tutorial  (0) 2017.03.11
[django] 개발 과정.  (0) 2017.02.07