[ django] django 실습 / 웹 프레임워크 이해 / MTV 구조와 URLs

sun1·2023년 3월 22일
0

web

목록 보기
4/5
post-thumbnail

🚀 django 실습


✅ django 설치

$ pip install django==3.2.18
  • 그냥 설치하게 되면 가장 최신 버전이 계속 업데이트 => 버전을 명시 !

✅ 가상환경 사용

ctrl + shift + p


✅ 프로젝트 생성
$ django-admin startproject 프로젝트 이름

👉 폴더 안만들고 지금 폴더에서 바로 프로젝트 만들기

$ django-admin startproject 프로젝트 이름 .
  • 프로젝트 : 앱의 집합 ( collection of apps )
  • 프로젝트에 여러 앱이 포함될 수 있음
  • 앱이 여러 프로젝트에 있을 수 있음

✅ 앱 생성

$ python manage.py startapp 앱이름

👉 앱 등록 ( 프로젝트 => settings.py )

  • 앱 ( application ) : 실제 요청을 처리하고 보여주는 등의 역할
  • 앱은 하나의 역할 및 기능 단위로 작성하는 것을 권장

✅ 서버 실행
$ python manage.py runserver



📌 django의 3가지 구조

Model / View / Template

👉 MTV 패턴

  • Model : 데이터와 관련된 로직 관리 / 응용프로그램의 데이터 구조를 정의하고 데이터베이스의 기록을 관리
  • Template : 레이아웃과 화면을 처리 / 화면상의 사용자 인터페이스 구조와 레이아웃 정의
  • View : Model , Template 과 관련한 로직을 처리해서 응답을 반환 / 클라이언트 요청에 대해 처리를 분기





📌 URLs 데이터 흐름

URL -> VIEW -> TEMPLATE

👉 url 에 myapp 이 작성되면 myapp 의 views 항목의 func_name 으로 !

👉 myapp의 index.html 으로 !

👉 render() : 주어진 템플릿을 주어진 컨텍스트 데이터와 결합하고 렌더링 된 텍스트와 함께 HttpResponse (응답) 객체를 반환하는 함수

return render(request, 'template_name', context)
  • request : 응답을 생성하는데 사용되는 요청 객체
  • template_name : 템플릿의 전체 이름 또는 템플릿 이름의 경로
  • context : 템플릿에서 사용할 데이터 (딕셔너리 타입으로 작성)

👉 실제 내용을 보여주는데 사용 / 파일의 구조나 레이아웃을 정의
👉 app 폴더 안의 templates 폴더 안의 app 이름과 똑같은 이름의 폴더 안에 생성 !




📌 Django URLs


  • Variable routing : 비슷한 URL과 템플릿을 계속해서 만들어야 한다면 하나의 path() 에 여러 페이지를 연결 / <> 에 변수 정의

  • App URL mapping : 하나의 프로젝트에 여러 앱이 존재할 때 각 앱 안에 urls.py 를 만들고 프로젝트 urls.py 에서 각 앱의 urls.py 파일로 매핑


  • Naming URL patterns : URL 에 name 인자를 지정하여 view 함수와 템플릿에서 특정 주소를 쉽게 참조할 수 있도록 함
    👉 urls.py 에서 name 을 지정 하면 템플릿에서는 {% url 'name' %} 을 사용하여 경로 주소 반환 -> 템플릿에 URL을 하드 코딩 하지 않고 링크를 출력 가능


  • URL namespace : 서로 다른 앱에서 동일한 URL 이름을 사용하는 경우에도 이름이 지정된 URL을 고유하게 사용할 수 있음 / 앱의 urls.py 에 app_name = '앱 이름' 을 urlpatterns 위에 작성
    ❗ app_name 을 지정한 이후에는 url 태그를 반드시 {% url '앱 이름 : URL name' %} 형태로만 사용



📌 Django Template Language

👉 HTML 에 python 으로 처리한 데이터를 표현하기 위해서 사용하는 built-in template system

  • {{ variable }} : render() 의 3번째 인자로 {'key':value} 의 딕셔너리 형태로 넘겨주며 key 를 template 에서 변수로 사용

  • {{ variable | filter }} : 표시할 변수를 수정할 때 사용 / ex) 사탕은 2글자

  • {% tag %} : 출력 텍스트를 만들거나, 반복 또는 논리를 수행하여 제어 흐름을 만드는등 복잡한 일들을 수행 / 일부 태그는 시작과 종료 태그가 필요

  • {# #} : 한 줄 주석 /

    {% comment %}
    여러 줄
    주석
    {% endcomment %}




📌 템플릿 상속

{% extends '부모 템플릿' %}

👉 반드시 템플릿 최상단에 작성 !

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

👉 하위 템플릿에서 재지정 할 수 있도록 블록을 정의

  • base 템플릿을 상속 받은 후 블록 부분만 재지정한다는 코드 !

만약, 모든 앱에서 base.html 을 상속 받고 싶다면 !
base.html 이 있는 templates 폴더를 밖으로 빼서 프로젝트 상단에 두고
settings.py 의 TEMPLATES 에서 'DIRS' : [BASE_DIR / 'templates'] 로 변동




📌 vscode extensions

0개의 댓글