[DRF] Django REST Framework

애이용·2021년 1월 27일

django

목록 보기
1/4
post-thumbnail

DRF(Django REST Framework)

Django 안에서 RESTful API 서버를 쉽게 구축할 수 있도록 도와주는 오픈소스 라이브러리

  • 개발을 쉽게 만들어줌
  • 인증 정책에 OAuth 를 위한 추가적인 패키지 추가되어 있는 경우
  • Serialize 기능 제공(DB data => JSON)

작업할 폴더 생성 후, 명령어

> python -m venv venv

venv 폴더 생성될 것

> cd ./venv/Scripts
> activate

django install

프로젝트 경로로 돌아가서 장고 설치

> pip install django

다운 받은 항목들을 requirements.txt 파일로 만든다

> pip freeze > requirements.txt

프로젝트 생성

> django-admin startproject restapi(프로젝트명) .

맨뒤에 꼭 . 을 붙여야
venv랑 같은 레벨의 위치에 manage.py 파일이 생성됨

django rest framework 설치

> pip install djangorestframework

실제 장고 서버와 REST 서버는 따로 운영이 되어야 함.
또 다른 프로젝트 생성

> python manage.py startapp post

restapi/settings.py

INSTALL_APPS 에
rest_framework post(app) 추가


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'rest_framework',
    'post',
]

post/models.py

from django.db import models

# Create your models here.
class Post(models.Model):
    id = models.AutoField(db_column='id', primary_key=True) # 쓰지 않아도 장고는 자동 id 생성해줌
    writer = models.ForeignKey('user.User', on_delete=models.CASCADE, related_name='post')
    title = models.CharField(max_length=100, blank=False, null=False)
    content = models.CharField(max_length=500)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self): 
        return str(self.id) + ' ' + self.title

    class Meta:
        ordering = ['created_at']

모델을 수정한 경우 Django에서는 makemigration과 migrate를 해주어야 한

python manage.py makemigrations post
python manage.py migrate post

post(app)에 serializers.py 추가
-> 객체와 같은 데이터를 JSON이나 XML처럼 쉽게 데이터를 바꾸어 통신할 수 있게 해주는 역할

post/serializers.py

class PostDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model =  Post
        fields = ['writer', 'title', 'content']

이어서 생성한 모델에 값을 입력해준다. 장고는 터미널 상에서 manage.py shell 기능으로 편하게 DB를 수정할 수 있다.

$ python manage.py shell
>>> from post.models import Post
>>> Post.objects.create(~)          
<Post: Post object (1)>
>>> Post.objects.all()

post/urls.py

from django.urls import include, path
from rest_framework.routers import DefaultRouter 
from . import views

urlpatterns = [
    path('', views.PostViewSet.post), # 자동으로 url 생성
    path('<int:post_id>', views.PostOneViewSet.post),
    path('comments', views.CommentViewSet.comment),
    path('comments/<int:comment_id>', views.CommentOneViewSet.comment),
]

restapi/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('post/', include('post.urls'))
]

스프링부트만 공부하다 다시 장고하니 넘나 신기
관리자페이지 짱~.~..

profile
로그를 남기자 〰️

0개의 댓글