### 안되는 영어로 구글 번역하며 보고 있습니다. 원본은 http://www.django-rest-framework.org/tutorial/quickstart/ 입니다. ###
관리자가 시스템의 사용자와 그룹을 보고 편집할 수 있도록 간단한 API를 만들 계획입니다.
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를 정의할 것입니다. 데이터 표현을 위해 사용할 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 설계입니다.
맞아, 우리는 몇 가지 견해를 적어 두는 편이 나을 것입니다. 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라는 클래스에 그룹화합니다.
필요하다면, 이들을 개별 뷰로 쉽게 분할할 수 있지만 뷰 세트를 사용하면 뷰 논리를 매우 간결하게 유지할 수 있을 뿐 아니라 매우 간결하게 유지할 수 있습니다.
이제 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를 사용하려는 경우 유용합니다.
또한 몇 가지 전역 설정을 지정하려고 합니다. Pagination을 사용하고 싶고, 우리는 API를 관리자만 액세스할 수 있기를 원합니다. 설정 모듈은 tutorial/settings.py에 있습니다.
INSTALLED_APPS = (
...
'rest_framework',
)
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAdminUser',
],
'PAGE_SIZE': 10
}
좋아, 끝났어.
이제 우리가 만든 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/로 이동하자.
브라우저에서 작업하는 경우, 오른쪽 상단의 컨트롤을 사용하여 로그인해야 합니다.
멋졌습니다.
REST framework가 함께 어울리는 방법에 대한 깊이 있는 이래를 원한다면 tutorial과 API 가이드를 살펴보기 바란다.
'Development > Django' 카테고리의 다른 글
[Django REST Framework] Tutorial (0) | 2017.03.11 |
---|---|
[django] 개발 과정. (0) | 2017.02.07 |