한 걸음씩

[Django] Django design pattern 본문

Django

[Django] Django design pattern

winter17 2023. 3. 21. 15:47

1.  django 프로젝트와 앱

 ► django project

  • 애플리케이션의 집합
  • DB, 설정, URL 연결, 전체 앱 설정 등을 처리
  • ex) 블로그 - 전체 설정 담당

 ► django application

  • 독립적으로 작동하는 기능 단위 모듈
  • 각자 특정한 기능을 담당하며 다른 앱들과 함께 하나의 프로젝트를 구성
  • MTV패턴에 해당하는 파일 및 폴더를 담당
  • ex) 게시글, 댓글, 카테고리 회원 관리 등 - DB, 로직, 화면

프로젝트 폴더 밖에 앱 폴더 존재

# 앱 생성
python manage.py startapp articles
  • 앱의 이름은 '복수형'으로 지정하는 것을 권장
  • python manage.py runserver 서버 실행 중에는 앱 생성을 할 수 없기 때문에 ctrl+c로 서버를 종료하고 앱 생성
# 앱 등록
# settings.py

INSTALLED_APPS = [
	# 앱 등록 권장 순서
    # 1. local app
	'articles',
    # 2. 3rd party app (설치를 통해 추가하는 앱)
    # 3. 기본 django app
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

# firstpjt > settings.py >> 'Application defintion'주석에 INSTALLED_APPS 코드가 이미 존재하는데
# articles 가장 상단에 추가
  • 반드시 앱을 생성한 후 에 등록해야 함
  • 반대로 등록 후 생성은 불가능

django_extensions 는 아래의 링크에서 확인

2023.03.21 - [Django] - django shell_plus

 

패키지 설치 후 진행 : pip freeze > requirements.txt 


2.  django 디자인 패턴

► (소프트웨어) 디자인 패턴

  • 소프트웨어 설계에서 발생하는 문제를 해결하기 위한 일반적인 해결책 (공통적인 문제를 해결하는데 쓰이는 형식화 된 관행)

 

► MVC 디자인 패턴

  • Model - View - Controller
  • 애플리케이션을 구조화하는 대표적인 패턴
  • 데이터, 사용자 인터페이스, 비즈니스 로직을 분리
  • 시간적 요소와 뒤에서 실행되는 로직을 서로 영향 없이, 독립적이고 쉽게 유지보수할 수 있는 애플리케이션을 만들기 위해

 

MTV 디자인 패턴

  • Model - Template - View
  • django에서 애플리케이션을 구조화하는 패턴(기존 MVC 패턴과 동일하나 명칭을 다르게 정의)

 

 

► 프로젝트 구조

  • settings.py : 프로젝트의 모든 설정을 관리
  • urls.py : URL과 이에 해당하는 적절한 views를 연결
  • __init__.py : 해당 폴더를 패키지로 인식하도록 설정
  • asgi.py : 비동기식 웹 서버와의 연결 관련 설정 (배포할 때)
  • wsgi.py : 웹 서버와의 연결 관련 설정 (배포할 때)
  • manage.py : Django 프로젝트와 다양한 방법으로 상호작용 하는  커맨드라인 유틸리티

urls.py - 관리자(admin) 페이지 

관리자 페이지

  • python manage.py runserver → 주소 복사 후 http://127.0.0.1:8000/admin/ → 위와 같은 관리자 페이지 나타남
  • 클라이언트가 주소를 통해 요청을 보내고 서버가 관리자 페이지를 클라이언트에게 반응을 줌
    • 우리가 주소창에 주소를 입력하고 enter를 치는 행위가 서버에게 요청을 보내는 것
    • 웹 페이지가 나타나는 것은 서버가 클라이언트에게 응답을 보내는 것
  • 클라이언트가 서버에게 잘못된 요청을 보낼 경우  서버는 page not found (404) 페이지를 찾을 수 없음이라는 메시지를 보여줌

 

 

► 앱 구조

  • admin.py : 관리자용 페이지 설정
  • models.py : DB와 관련된 Model을 정의, MTV 패턴의 M
  • view.py : HTTP 요청을 처리하고 해당 요청에 대한 응답을 반환(url, mode, template과 연계), MTV 패턴의 V
  • apps.py : 앱의 정보가 작성된 곳
  • tests.py : 프로젝트 테스트 코드를 작성하는 곳

 

전체 흐름 : 클라이언트가 주소를 통해 서버에 요청을 보내고, 서버는 클라이언트에게 페이지로 응답을 준다

요청 → urls.py → view.py → templates → 응답

 

http://127.0.0.1:8000/  → 로켓 페이지

http://127.0.0.1:8000/admin/   로그인 페이지

http://127.0.0.1:8000/articles/  index.html파일에 작성한 내용

💡templates를 만든순간 로켓페이지는 작동안함


3.  요청과 응답

  • templates 폴더는 articles 앱 폴더안에 생성 해야하고 index.html 템플릿 페이지 작성해야 함
  • urlpatterns의 path 'articles/'는 다음 노란색 부분을 나타냄 http://127.0.0.1:8000/articles/
    • 따라서 요청 url을 'articles/'가 아닌 'berners-lee/'로 변경하고 싶다면 'articles/'자리에 'berners-lee/'를 적으면 됨
    • articles 폴더명, settings.py의 INSTALLED_APPS에 추가된 폴더명, url.py의 from 폴더명 부분과 무관함
  • templates 폴더의 index.html 경로 확인할 것
  • 폴더명(templates)이 틀릴 경우 서버연결이 안되므로 주의할 것
  • django의 모든 url은 / 로 끝나야 함

  • index.html에서 작성한 내용이 나오는지 url접속해서(http://127.0.0.1:8000/articles/) 페이지 확인하기
  • articles/ 부분은 내가 어떤 url 요청을 하느냐에 따라 달라짐

'Django' 카테고리의 다른 글

[Django] 템플릿 경로 지정 BASE_DIR  (0) 2023.03.22
[Django] 로또 번호 생성 프로젝트  (0) 2023.03.22
[Django] Django Template  (0) 2023.03.22
django shell_plus  (0) 2023.03.21
[Django] Understanding Django and framework  (0) 2023.03.20