def get_board_set_from_board_group(request, board_group_id):
...완료!!!
def home(request):
...완료!!!
def board(request, board_url):
...완료!!!
def post_detail(request, board_url, pk):
...이번장!!!
def reply_write(request, board_url, pk):
...
def rereply_write(request, board_url, pk):
...
def reply_delete(request, board_url, pk):
...
def rereply_delete(request, board_url, pk):
...
def like(request, board_url, pk):
...
[ get_board_set_from_board_group 함수 리팩토링 ]
get_board_set_from_board_group 리팩토링 정보 보기
[ home 함수 리팩토링 ]
home 페이지 성능 개선 Board View 코드 리팩토링
home 페이지 좋아요, 댓글 수 Board View 코드 리팩토링
[ board 함수 리팩토링 ]
board 함수 리팩토링 설계
board 함수 리팩토링 일반 게시판 View 재구성
board 함수 리팩토링 태그 게시판 View 재구성
board 함수 리팩토링 전체 게시판 View 재구성
board 함수 리팩토링 게시판 View 불필요 코드 제거
Board 앱의 View 함수들을 살펴보니 총 9개의 코드가 존재합니다.
하나하나씩 불필요한 코드를 제거하거나 리팩토링해 보겠습니다
이번 장에서는 디테일 페이지를 리팩토링하려고 합니다.
def post_detail(request, board_url, pk):
qs = Post.objects.active().filter(
board__url=board_url
).select_related(
'board'
).order_by(
'-id'
)
prev_post = qs.filter(id__lt=pk).first()
next_post = qs.filter(id__gt=pk).order_by('id').first()
post = get_object_or_404(qs, board__url=board_url, pk=pk)
post_summary = get_latest_post_summary_by_post_id(post.id)
if request.user.is_authenticated:
like_check = Like.objects.filter(author=request.user, post=post).exists()
else:
like_check = False
context = {
'like_check': like_check,
'qs': qs,
'post': post,
'post_summary': post_summary,
'prev_post': prev_post,
'next_post': next_post,
}
return render(request, 'board/post.html', context)
코드를 보면 View에서 6가지 정보를 HTML에 반환하고 있습니다.
like_check: 사용자가 페이지에 진입한 경우 좋아요를 했는지 안 했는지 판단하는 로직 같습니다.
qs: 해당 게시글의 게시판에서 최신 목록을 조회할 수 있도록 하는 것 같습니다.
post: 현재 게시글의 디테일한 정보인 것 같습니다.
post_summary: ChatGPT 이용해서 게시글 요약하는 영역입니다.
prev_post: 바로 이전 글인 것 같습니다.
next_post: 바로 다음 글인 것 같습니다.
위에 있는 내용을 기반으로 보면, 많은 정보를 View에서 추가적으로 전달해야 할 것 같습니다.
이유는 현재 모든 데이터를 View를 통해 전달하는 것이 아니라, HTML 코드에 로직이 들어가 있는 것 같습니다.
작업을 설계해 봅시다.
1. HTML 로직을 전부 View 로 뺍니다.
2. View 자체 코드를 리펙토링 합니다.
3. 불 필요한 코드는 제거 합니다.
다음 장에 1번을 작업하도록 하겠습니다.