python manage.py startapp articles
settings.py > INSTALLED_APPS
에 등록
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로 오면 게시글 작성할 수 있게 한다.
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에는 담지 않아도 되어 경로가 깔끔해진다.
<body>
안에 <int:article_id>
를 실어 보내면 POST로 올 때 누르면 된다?좋아요like은 댓글 내용이 빠진 댓글이라고 생각하면 된다. 댓글인데, input 칸이 없어서 댓글 다는 버튼만 눌렀다고 생각하면 된다. 댓글 개수 count = 좋아요 개수
좋아요like의 상세페이지
, 수정
, 삭제
는 없다.
삭제가 있긴 한데, 동일한 사람이 like를 할 경우 토글 식으로 있으면 지우고 없으면 추가하는 식. 즉 delete도 필요가 없다.
url 설계 원칙
url에 리소스 <int:article_id>
가 있으면 그것에 대해 무엇을 할지는 method(get, put, delete 등..)로 표현한다.