[Django] views.py 파일 분리하기

2024. 5. 15. 15:34·Django
목차
  1. 첫번째 방법
  2. 두번째 방법
728x90
반응형

앱의 크기가 커지면 커질수록 뷰 파일의 함수도 늘어나게 된다. 그러면서 원하는 기능을 찾기가 어려워지게 되고, 뷰 파일의 크기가 방대해지게 된다.

그래서 views.py 파일을 분리하고자 한다. 이에 두가지 방법이 존재한다.

첫번째 방법

폴더를 하나를 만들어 views.py안에 있는 함수를 기능별로 분류하는 방법이다.

내 경우 테이블이 두 개가 있다. 질문과 답변을 받아 데이터를 관리하는데, 이를 가지고 세 가지로 분류하고자 한다.

파일명 기능 함수

base_views.py 기본관리 index, detail
question_views.py 질문관리 question_create, question_modify, question_delete
answer_views.py 답변관리 answer_create, answer_modify, answer_delete

그리고 나서 views.py파일에 있던 코드를 위에서 분류한 것처럼 기능에 따라 파일에 코드를 넣어준다. 그리고 나서 views.py파일을 삭제하고, 폴더 안에 **init**.py파일을 만들어준다.

from .base_views import *
from .question_views import *
from .answer_views import *

위와 같이 작성하고 보면

views 폴더
views 폴더

위와 같이 되어 있고, 홈페이지에서 제대로 실행되고 있다면 잘 동작하는 것이다.

두번째 방법

장고는 디버깅시 보통 urls.py 파일에서 URL에 매핑된 함수를 찾는다. 하지만 첫번째 방법을 사용하면 urls.py 파일에 매핑된 함수명은 알 수 있지만 어떤 뷰 파일의 함수인지는 알 수가 없다. 이는 views 디렉터리의 모든 뷰 파일을 찾아봐야 하는 불편함을 초래하게 한다.

혼자가 아닌 여러 명이 함께 하는 프로젝트라면 첫번째 방법은 절대로 추천하지 않는다.

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

첫번째 방법으로 한 것을 기반으로

1) views/init.py 파일 제거

del __init__.py

views 디렉터리의 __init__.py 파일을 제거한다.

2) 앱 안의 urls.py 수정하기

from django.urls import path

from .views import base_views, question_views, answer_views

app_name = 'pybo'

urlpatterns = [
    # base_views.py
    path('',
         base_views.index, name='index'),
    path('<int:question_id>/',
         base_views.detail, name='detail'),

    # question_views.py
    path('question/create/',
         question_views.question_create, name='question_create'),
    path('question/modify/<int:question_id>/',
         question_views.question_modify, name='question_modify'),
    path('question/delete/<int:question_id>/',
         question_views.question_delete, name='question_delete'),

    # answer_views.py
    path('answer/create/<int:question_id>/',
         answer_views.answer_create, name='answer_create'),
    path('answer/modify/<int:answer_id>/',
         answer_views.answer_modify, name='answer_modify'),
    path('answer/delete/<int:answer_id>/',
         answer_views.answer_delete, name='answer_delete'),
]

URL 매핑시 views.index 를 base_views.index 와 같이 해당 모듈명이 표시되도록 바꾸었다. 모듈명이 있기 때문에 이제 누가 보더라도 어떤 뷰 파일의 함수인지 명확하게 인지할 수 있다.

3) config의 urls.py 수정하기

from django.contrib import admin
from django.urls import include, path
from pybo.views import base_views

urlpatterns = [
    path('pybo/', include('pybo.urls')),
    path('common/', include('common.urls')),
    path('admin/', admin.site.urls),
    path('', base_views.index, name='index'),  # '/' 에 해당되는 path
]

config/urls.py의 index에 해당되는 URL 매핑도 views 대신 base_views를 사용하도록 다음처럼 수정한다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)
  1. 첫번째 방법
  2. 두번째 방법
'Django' 카테고리의 다른 글
  • [Django] 장고 이미지 간단하게 추가하기
  • [Django] 검색 기능 구현하기
  • [Django] 장고 모델 변경하기
  • [Django] 회원가입 구현하기
Uheeking
Uheeking
안녕하세요. react, flutter, node.js에 관련해서 글을 쓰는 블로그입니다.
Uheeking의 it로그안녕하세요. react, flutter, node.js에 관련해서 글을 쓰는 블로그입니다.
Uheeking
Uheeking의 it로그
Uheeking
전체
오늘
어제

공지사항

  • 분류 전체보기 (254)
    • React (48)
    • Node.js (32)
    • Next.js (22)
    • Vue.js (15)
    • javascript (3)
    • Django (19)
    • etc (23)
    • Flutter (30)
    • Error (16)
    • AWS (11)
    • docker & Kubernetes (32)
    • git (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
250x250

인기 글

태그

  • 노드
  • AWS
  • Props
  • 쿠버네티스
  • 넥스트
  • supabase
  • Kubernetes
  • 오블완
  • 장고
  • error
  • Django
  • Create
  • flutter
  • SSR
  • Vue.js
  • 티스토리챌린지
  • 플러터
  • docker
  • sequelize
  • useEffect
  • NEXT
  • 리액트
  • React
  • 도커
  • mosquitto
  • next.js
  • Express
  • firebase
  • MySQL
  • node.js

최근 댓글

최근 글

250x250
hELLO· Designed By정상우.v4.5.2
Uheeking
[Django] views.py 파일 분리하기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.