Django 프로젝트 시작해보기 + MTV 패턴

Jwahoon Kim·2021년 7월 6일
0

Django

목록 보기
2/10

1. 프로젝트를 시작하면 다음과 같은 폴더들이 생긴다.

img

  • 텍스트init.py : Python으로 하여금 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 단순한 빈 파일
  • asgi.py / wsgi.py : 장고와 웹 서버가 통신을 하기 위한 규약들을 지원해주는 파일 (HTTP, HTTP/2 및 WebSocket 등의 프로토콜을 지원)
  • settings.py : 장고 프로젝트의 설정을 기록/변경 할 수 있는 파일
  • urls.py : 장고로 접근하는 URL을 URL 규칙을 보고 그에 맞는 View를 연결시켜주는 기능을 하는 파일
  • manage.py : 장고의 다양한 명령어를 실행하기 위한 파일
  • db.sqlite3 : 장고에서 기본적으로 제공해주는 데이터베이스(장고에서는 기본적으로 SQLite , PostgreSQL, MySQL , Oracle , MariaDB를 지원해줍니다.)

2. 새 앱 만들기

1) Django 앱이란?

프로젝트를 기능 단위로 쪼갠 덩어리입니다. 하나의 프로젝트 안에는 하나의 웹사이트를 구성하는 여러 앱이 존재할 수 있습니다.

blogPosts 라는 앱을 만들어 봅시다.

(.venv) > django-admin startapp blogPosts

그 후 프로젝트 이름/settings.py에 blogPosts 라는 앱을 사용할 것이라고 알려주어야 하므로 다음과 같이 작성!

# setting.py 에서
...
INSTALLED_APPS = [
...
'blogPosts.apps.BlogpostsConfig`, # 줄여서 blogPosts라고 적어도 됨
]

3. MTV 패턴에 따라 하나씩 만들기!

1) Template

  • Template은 User에게 보여줄 화면!

위 사진과 같이 blogPosts/templates/blogPosts 안에 index.html 파일을 만든다.

  • ????? 너무 번거롭지 않나 ?????
    그냥 blogPosts/templates/index.html로 하면 안되나요?????

  • 그러나 이것은 좋은 생각이 아닙니다. Django는 프로젝트 내에서 template을 찾을 때 이름이 일치하는 첫번째 template을 선택합니다. 그렇기 때문에 만약 index.html이라는 template이 여러 개의 app에 존재한다면 우리가 원했던 app이 아닌 다른 app의 index.html이 선택될 수 있겠죠.

  • Django 에게 내가 원하는 정확한 template 을 지정하기 위해서 가장 편리한 방법은 이름공간으로 한번 더 구분짓는 것인데, 어플리케이션의 이름으로 된 디렉토리에 이러한 template 들을 넣으면 됩니다. Django 공식문서 - 템플릿 네임스페이싱

2) View

  • view : 경로에 맞는 기능을 담당
  • Django에게 index.html 을 보여달라는 요청을 하고 싶으면 view를 만들어야 한다!
# blogPosts/views.py
...
def index(request):
    return render(request, 'blogPosts/index.html')
  • render함수의 경우 두번째 인자로 받은 파일을 렌더링 합니다.
    정확한 template을 지정하기 위해 app 이름을 가진 디렉토리를 만들었고 그에 따른 인자를 넣은 모습!

3) URL

  • url : 경로와 view를 연결

  • 최종적으로 유저가 index.html 파일을 볼 수 있는 url을 작성해야 함!

  • urls.py에서는 유저가 요청을 보낸 주소와 views.py에서 작성한 함수를 연결해주는 역할을 합니다.

# 프로젝트명/urls.py
...
from django.contrib import admin
from django.urls import path
import blogPosts(앱이름).views # 추가

urlpatterns = [
	...
    
    path(''(기본경로라는 뜻), blogPosts(앱이름).views.index, name='index'), <<< 이부분 추가!
]
  1. 유저가 어떤 경로(혹은 주소)에 접속(요청)하게 되면 그 경로를 위에서부터 순서대로 path 함수의 첫번째 인자와 비교하고
  2. 같은 경로를 찾게 되면 해당 함수의 두번째 인자로 넣어준 함수를 실행시켜 줍니다.

  • 모델 작성
  • url에서 view 연동
  • view에서 template 렌더링
  • template에서 링크 태그( <a></a>)등을 활용한 다른 경로, 즉 url로의 요청

0개의 댓글