한 걸음씩
[Django] Django design pattern 본문
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 가장 상단에 추가
- 반드시 앱을 생성한 후 에 등록해야 함
- 반대로 등록 후 생성은 불가능
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 |