DRF 4-2 Restful API 설계하기 ✅

Grace Goh·2022년 11월 9일
0

Django Rest Framework

목록 보기
13/36

python manage.py startapp articles
settings.py > INSTALLED_APPS에 등록

urls.py

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('users/', include("users.urls")),
    path('articles/', include("articles.urls")), # 추가
]

articles/urls.py를 만든다.
users/urls.py에서 복사해서 필요 없는 부분은 삭제하고 필요한 부분을 추가한다.

인스타그램 첫 화면을 생각해 보면 ①게시글 리스트가 쭉 있고 ②게시글을 작성할 수 있고 ③클릭하면 (모달 창으로) 게시글로 들어갈 수 있다. 일반적인 게시판으로 생각하면, 클릭시 상세페이지로 들어가는 것과 유사하다. frontend의 차이일 뿐이다 : '어떤 식으로 보여줄지'

2주차 강의의 게시판 기능과 동일하다. (동일하게 API 설계한다)
리스트get, 작성post, 상세게시글get, 수정update, 삭제delete.

articles/는 urls.py에서 썼기 때문에 articles/urls.py에서는 아래와 같이 기본 경로 ''를 설정해서 GET으로 오면 전체 리스트를 보여주고 POST로 오면 게시글 작성할 수 있게 한다.

articles/urls.py

from django.urls import path 
from articles import views

urlpatterns = [
    path('', views.ArticleView.as_view(), name='article_view'),
    path('<int:article_id>/', views.ArticleDetailView.as_view(), name='article_detail_view')  
    path('comment/', views.CommentView.as_view(), name='comment_view'), # 댓글
    # path('<int:article_id>/comment/', views.CommentView.as_view(), name='comment_view'),
    path('comment/<int:comment_id>', views.CommentDetailView.as_view(), name='comment_detail_view'), # 댓글 수정
    path('like/', views.LikeView.as_view(), name='like_view'), # 좋아요
  • views.ArticleView가 없으니 articles에 만들어준다.

  • 댓글comment과 좋아요like는 주석처럼 <int:article_id>url로 보내는 방식도 있지만 이번에는 게시글의 <body> 안에 자체적으로 <int:article_id> 정보를 담는 방식을 쓴다. 그러면 url에는 담지 않아도 되어 경로가 깔끔해진다.

    • 좋아요like는 <body> 안에 <int:article_id>를 실어 보내면 POST로 올 때 누르면 된다?

    • 좋아요 GET은 필요하지 않다.. article을 조회할 때 연관테이블 like를 가져온다.
  • 좋아요like은 댓글 내용이 빠진 댓글이라고 생각하면 된다. 댓글인데, input 칸이 없어서 댓글 다는 버튼만 눌렀다고 생각하면 된다. 댓글 개수 count = 좋아요 개수

  • 좋아요like의 상세페이지, 수정, 삭제는 없다.
    삭제가 있긴 한데, 동일한 사람이 like를 할 경우 토글 식으로 있으면 지우고 없으면 추가하는 식. 즉 delete도 필요가 없다.

  • url 설계 원칙
    url에 리소스 <int:article_id>가 있으면 그것에 대해 무엇을 할지는 method(get, put, delete 등..)로 표현한다.

profile
Español, Inglés, Coreano y Python

0개의 댓글