본문 바로가기

Django/따라하는 장고

24. views.py 분리

점프 투 장고 튜토리얼을 계속 따라하고있는데 계속 하다보면 views.py 에 함수가 계속 늘어나서 불편함을 느끼는데 이를 해결해보자.

이를 해결하기 위해서는 2가지 방법이 있는데 2가지 방법을 다 해보자. 먼저 첫 번째 방법을 한 후에 두 번째 방법을 할 수 있기 때문에 먼저 첫번째 방법부터 따라해보자.

 

[첫 번째 방법]

 

첫 번째 방법은 views.py 파일만 여러 파일로 분리하고 나머지는 고치지 않아도 되는 변화가 적은 방법이다.

먼저 projects\mysite\pybo\views 디렉토리를 만들자.

views.py 파일에 정의된 함수를 기능별로 views 디렉토리에 다음의 파일로 저장하자.

파일명 기능 함수
base_views.py 기본관리 index, detail
question_views.py 질문관리 question_create, question_modify, question_delete
answer_views.py 답변관리 answer_create, answer_modify, answer_delete

projects\mysite\pybo\views\base_views.py 파일을 만들고 다음과 같이 작성하자.

pybo\views.py 에 있던 index 함수와 detail 함수의 내용을 그냥 복사 붙여넣기를 하면 된다. import 문맥만 수정해주면된다. pybo\views.py 에서는 from .models import Question 처럼 같은 디렉토리에 있는 models.py 모듈을 import 했지만 지금은 views 디렉토리 하위에 base_views.py 파일이 위치하므로 from ..models import Question 처럼 부모디렉토리의 models.py 모듈을 import 해야 한다.

 

projects\mysite\pybo\views\question_views.py 파일을 새로 만들고 작성하자.

views.py 파일에서 함수들을 복사해 붙여넣기하자.

 

projects\mysite\pybo\views\answer_views.py 파일을 새로 만들고 내용을 복사 붙여넣기하자.

 

그리고 projects\mysite\pybo\views\__init__.py 파일을 새로 만들고 다음과 같이 작성하자.

views 디렉토리의 __init__.py 파일에서 views 디렉토리에 있는 base_views.py 등의 모든 뷰 파일의 함수를 import 했기 때문에 pybo\urls.py 와 같은 다른 모듈에서 views.py 모듈의 함수를 사용하는 부분을 수정할 필요가 없다.

그리고 이제 pybo\views.py 파일을 삭제하자.

테스트해보면 아무런 문제가 없다.

 

[두 번째 방법]

 

첫 번째 방법에는 단점이 있다.

 

장고는 디버깅시 보통 urls.py 파일에서 URL 에 매핑된 함수를 찾는것으로 시작한다. 하지만 첫 번째 방법을 사용하면 urls.py 파일에 매핑된 함수명은 알 수 있지만 어떤 뷰 파일의 함수인지는 알 수가 없다. 이는 views 디렉토리의 모든 뷰 파일을 찾아봐야 하는 불편함을 초래하게 한다. 이러한 이유로 혼자가 아닌 여러명이 함께 하는 프로젝트라면 첫 번째 방법은 절대로 추천하지 않는다고 한다.

두 번째 방법은 views 디렉토리의 __init__.py 파일을 제거하고 pybo/urls.py 에서 views.index 대신 base_views.index 와 같이 전체 경로를 써주는 방법이다. 먼저 views 디렉토리의 __init__.py 파일을 제거하자.

그 후 projects\mysite\pybo\urls.py 파일을 다음과 같이 수정하자.

URL 매핑시 views.index 가 아닌 base_views.index 이런식으로 모듈명이 표시되도록 바꾸었다. 이제 어떤 뷰 파일의 함수인지 명확하게 인지할 수 있다.

 

projects\mysite\config\urls.py 파일도 다음과 같이 수정하자.

이 파일도 index 에 해당되는 URL 매핑을 좀 더 명확하게 수정했다.

두 번째 방법은 프로그램을 모두 하나하나 수정해 주어야하는 단점이 있지만 좀 더 명확해지는 장점이 있다.

'Django > 따라하는 장고' 카테고리의 다른 글

26. 앵커  (0) 2022.11.23
25. 추천 기능  (0) 2022.11.23
23. 답변 수정 및 삭제  (0) 2022.11.19
22. 질문 수정 및 삭제  (0) 2022.11.18
21. author 표시  (0) 2022.11.17