개인 프로젝트/Django-mysite

#24 View 파일 분리하기

Scala0114 2021. 10. 10. 16:21

Pybo 에도 슬슬 많은 기능이 추가되면서 pybo.views.py 파일의 크기가 제법 커졌다.  간단한 프로젝트이기 때문에 아직까진 큰 문제가 없지만 더 많은 기능이 추가된다면 한 파일에 너무 많은 함수가 공존하게되어 관리가 어려워질 것이다.

이번에는 views.py 파일을 분리하는 방법을 알아본다. 

 

1. 카테고리별 view 파일 생성

먼저 views.py 에 몰아넣어놨던 함수들을 카테고리화하여 별도의 파일들에 정의할 것이다. 현재 pybo/views.py 에

정의된 14개의 함수들을 다음과 같이 카테고리화 한다.

  • base_views.py (기본 관리)
    • index
    • detail

 

  • qeustion_views.py (게시글 관리)
    • question_create
    • question_modify
    • question_delete

 

  • answer_views.py (답글 관리)
    • answer_create
    • answer_modify
    • answer_delete

 

  • comment_views.py (댓글 관리)
    • comment_create_question
    • comment_create_answer
    • comment_modify_question
    • comment_modify_answer
    • comment_delete_question
    • comment_delete_answer

 

pybo 디렉토리 내에 views 디렉토리를 생성하여 그 안에 위 카테고리에 따라 함수를 별도의 파일에 정의하고

import 문을 정리해준다.(PyCharm 기준 Ctrl + Alt + O)  원래 같은 디렉토리에 있었던 models.py 나 forms.py

파일의 경우 view 디렉토리 내부로 파일이 이동하면서 상위디렉토리에 위치한 파일이 되었기 때문에 

from ..models ~ 와 같은 형태로 import 문을 변경해야한다.

 

마지막으로 views 디렉토리 내의 __init__.py 에 위와같이 분리한 파일내의 모든 함수를 import 해주는것으로 나머지

코드의 수정 없이도 기존처럼 사이트가 잘 작동한다.

 

 

2. views/__init__.py 파일 제거

 그런데 위의 방법에는 한가지 중대한 문제가 있다.  view의 어떤 함수가 어느 파일에 속해있는지 알 방법이 없다는

것이다.  특정 기능을 수정하기 위해서는 그 기능이 정의된 파일을 찾기위해 views 디렉토리 내의 모든 파일을 열어볼

필요가 생긴다.  이를 해결하기 위해서는 불편하더라도 views 디렉토리의 __init__.py 를 삭제한 다음 뷰 함수들이

호출된 파일들에 직접 import 문을 작성해줘야 한다.

 

pybo/urls.py 를 위와같이 수정해준다.  

 

config/urls.py 의 index 에 해당하는 매핑도 위와같이 수정해준다.

 

이제 어느 뷰 함수가 어느 파일에 정의되어있는지 한눈에 알 수 있다.