[TIL: 0315] Django: MTV구조와 CRUD

ryun·2023년 3월 15일
0

TIL

목록 보기
30/34

Design Pattern

자주 사용되는 구조를 일반화해서 하나의 공법으로 만든 것

  • 소프트웨어에서의 관점
    • 각기 다른 기능 가진 소프트웨어 개발할 때 공통적 설 계 문제가 존재 > 해결책 사이의 공통점 발견
    • 이러한 유사점 = 패턴
    • 클라이언트 - 서버 구조도 소프트웨어 디자인 패턴 중 하나
    • 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책 제시
    • 커뮤니케이션의 효율성도 증가

🎈 Django에서의 디자인 패턴

MTV

MVC 패턴을 기반으로 조금 변형된 패턴

MCV
Model - View - Controller
데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트 디자인 패턴

  1. Model
    데이터와 관련된 로직을 관리
    데이터 구조 정의하고 데이터베이스 기록 관리

  2. View
    레이아웃과 화면을 처리
    사용자 인터페이스 구조와 레이아웃을 정의

  3. Controller
    명령을 model과 view부분으로 연결
    클라이언트 요청에 대해 처리 분기하는 역할
    데이터가 필요 > 모델에 접근해서 데이터 가져옴 > 가져온 데이터를 템플릿으로 보내 화면 구성 > 구성된 화면을 응답으로 클라이언트에게 반환

  • 관심사 분리
  • 업무의 분리와 향상된 관리 제공
  • 각 부분 독립적으로 개발할 수 있어, 하나 수정하고 싶을 때 모두 건들지 않아도 된다
    => 개발 효율성 및 유지보수 쉬워짐
    => 다수 멤버로 개발하기 용이함

장고는 MTV 디자인 패턴
모델 : 데이터 관련
템플릿 : 화면 관련
뷰 : 모델 & 템플릿 중간 처리 및 응답 반환

Django Template

데이터 표현을 제어하는 도구이자 표현에 관련된 로직 동적 컨텐츠 삽입

Django Template Language

  • 조건, 반복, 변수 치환, 필터 등의 기능 제공
    이건 파이썬 코드로 실행되는 것이 아님
  • 단순히 파이썬이 HTML에 포함된 것이 아니니 주의
  • 프로그래밍적 로직이 아니라 프레젠테이션을 표현하기 위한 것

DTIL 신택스

  • Variale 변수가 어떻게 보여질지 바꿔준다
    `{{variable}}
    영어, 숫자, 밑줄의 조합으로 구성
    dot(.)으로 변수 속성에 접근
    render의 세 번째 인자로 {'key': value}처럼 딕셔너리 형태로 넘김
    key에 해당하는 문자열이 template에서 사용 가능한 변수명이 됨

  • Filters 변수가 보여지는게 바꿔진다
    {{variable|filter}}
    ex. {{name|lower}}
    모두 소문자로 출력
    60개의 built-in template filters를 제공
    일부 필터는 인자를 받기도 한다 `{{name|truncatewords: 30}}

  • Tags 기능적인 것을 태그화
    {% tag %}
    출력 텍스트를 만들거나 반복, 논리를 수행하여 제어 흐름을 만드는 등
    변수보다 복잡한 일들을 수행
    일부 태그는 시작과 종료 태그 필요 {% if %}{% endif %}
    24개의 빌트인 템플릿 태그 제공

  • Comments 주석
    {# #}
    한 줄 주석만 사용 가능 (줄바꿈 사용 불가)
    여러 줄 주석은
    {% comment %} 여러 줄 주석 {% comment %}

Template inheritance

템플릿 상속

  • 코드 재사용성에 초점
  • 사이트 모든 공통 요소 포함, 하위 템플릿이 재정의할 수 있는 블록을 정의하는 기본 스켈레톤 템플릿 만들 수 있음
  • 모든 템플릿에 부트스트랩 적용하려면

템플릿 상속에 관련된 태그

{% extends '' %}
자식(하위)템플릿이 부모 템플릿을 확장한다는 것을 알림

  • 반드시 템플릿 최상단에 작성되어야 함(즉, 2개 이상 사용할 수 없음)

{% block content %}{% endblock content %}

  • 하위 템플릿에서 재지정 할 수 있는 블록 정의
    하위 템플릿이 채울 수 있는 공간
    가독성 높이기 위해 선택적으로 endblock 태그에 이름 지정할 수 있음
    컨텐트 블록 열고 컨텐트 블록 닫는다고 쓰는게 좋다

Trailing Slashes

장고는 URL 끝에 /가 없다면 자동으로 붙여주는 것이 기본 설정

  • 모든 프레임 워크가 이렇게 동작하는 것은 아님'
    URL을 정규화해 검색 엔진 로봇이 혼동하지 않게 한다

Variable routing

템플릿 많은 부분이 중복되고,
일부만 변경되는 상황에서 비슷한 URL과 템플릿을 계속 만들지 말자

URL 주소를 변수로 사용하는 것
URL 일부를 변수로 지정해 view 함수의 인자로 넘길 수 있음
변수 값에 따라 하나의 path()에 여러 페이지를 연결 시킬 수 있음

  1. str
  • '/'를 제외하고 비어 있지 않은 모든 문자열
  • 작성하지 않을 경우 기본 값
  1. int
  • 0 또는 양의 정수와 매치

App URL mapping

0개의 댓글