728x90
반응형
해당 글은 장고 퀵스타트 를 참고한 글입니다.
프로젝트 초기화
프로젝트 생성
- 폴더 생성
- 가상 환경 생성
- 장고, 장고레스트프레임워크 설치
- 프로젝트 생성
- 앱 생성
# Create the project directory
mkdir tutorial
cd tutorial
# Create a virtual environment to isolate our package dependencies locally
python3 -m venv env
source env/bin/activate # On Windows use `env\Scripts\activate`
# Install Django and Django REST framework into the virtual environment
pip install django
pip install djangorestframework
# Set up a new project with a single application
django-admin startproject tutorial . # Note the trailing '.' character
cd tutorial
django-admin startapp quickstart
cd ..
완료하고 나면 아래와 같은 디렉토리 구조를 볼 수 있다.
$ pwd
<some path>/tutorial
$ find .
.
./tutorial
./tutorial/asgi.py
./tutorial/__init__.py
./tutorial/quickstart
./tutorial/quickstart/migrations
./tutorial/quickstart/migrations/__init__.py
./tutorial/quickstart/models.py
./tutorial/quickstart/__init__.py
./tutorial/quickstart/apps.py
./tutorial/quickstart/admin.py
./tutorial/quickstart/tests.py
./tutorial/quickstart/views.py
./tutorial/settings.py
./tutorial/urls.py
./tutorial/wsgi.py
./env
./env/...
./manage.py
데이터베이스 초기화
- 디비 생성(마이그레이션)
- 어드민 유저 생성
python manage.py migrate
python manage.py createsuperuser --username admin --email admin@example.com
접속
- localhost:8000/admin에 접속 후 로그인
- 아래와 같은 화면을 볼 수 있음
구성요소 설명
Serializers
- 시리얼라이저는 디비의 모델을 직렬화 해 읽어오는 것을 의미함
- 모델에서 필요한 것만 메타 데이터로 표현함
from django.contrib.auth.models import Group, User
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']
Views
- 뷰는 실제로 사용되는 함수들의 모임임
- api에서 실제 보여주고자 하는 것
- urls.py에서 매핑해서 사용함
- 함수와 클래스로 이뤄질 수 있음
- 함수일 때는 기능을 나타냄
- 클래스 일 때는 쿼리, 시리얼라이저, 권한 등이 묶이며 viewsets를 사용함
from django.contrib.auth.models import Group, User
from rest_framework import permissions, viewsets
from tutorial.quickstart.serializers import GroupSerializer, UserSerializer
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
permission_classes = [permissions.IsAuthenticated]
class GroupViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer
permission_classes = [permissions.IsAuthenticated]
URLs
- api의 URL을 매핑함
- router or urlpatterns를 사용해 매핑함
- viewsets를 사용하면 router가 자동으로 매핑해줌
from django.urls import include, path
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 = [
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
urlpatterns += router.urls
Pagination
- 페이지네이션은 여러 객체를 한 번에 가져올 수 있게 해줌
- 기본 페이지네이션의 갯수를 정함
- 아래 코드는 settings.py 안에 있음
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
Settings
- 장고의 설정을 저장함
- 키도 여기에 있으니 주의할 것
- 앱들을 여기에 추가 해줌
INSTALLED_APPS = [
...
'rest_framework',
]
테스트
서버 실행
python manage.py runserver
확인
curl
- curl을 실행 시키면 아래와 같이 작성할 수 있음
- 우리는 장고 레스트 프레임워크를 쓰므로 이점을 이용하기 위해 아래로 넘어가도 됨
bash: curl -u admin -H 'Accept: application/json; indent=4' http://127.0.0.1:8000/users/
Enter host password for user 'admin':
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"url": "http://127.0.0.1:8000/users/1/",
"username": "admin",
"email": "admin@example.com",
"groups": []
}
]
}
화면에서 확인
- http://127.0.0.1:8000/users/로 접속
- 아래와 같은 화면 확인 가능
728x90
반응형
'Backend > Django' 카테고리의 다른 글
Django Tutorial 5: Relationships & Hyperlinked APIs (0) | 2024.03.12 |
---|---|
Django Tutorial 4: Authentication & Permissions (0) | 2024.03.10 |
Django Tutorial 3: Class-based Views (0) | 2024.03.10 |
Django Tutorial 2: Requests and Responses (0) | 2024.03.10 |
Django Tutorial 1: Serialization (0) | 2024.03.10 |