- 장고를 활용하여 WebApp을 만들어보자
- 장고에서는 MVT 디자인 패턴을 사용(자바의 MVC 디자인패턴과 유사)
- db = model
- web service = view
- client = template 이라고 한다.
cmd 창에서 이동
cd C:\dev장고 설치(cmd 창)
pip install Django==4.2장고 버전 확인
django-admin --version
장고는 프로젝트와 앱으로 구성되어 있다.
- 장고 프로젝트 생성(django-admin startproject 프로젝트 이름)
django-admin startproject mysite
- 만든 mysite로 이동
C:\dev_re>cd mysite
- 장고 실행
C:\dev\mysite>python manage.py runserver
장고 앱 생성 코드(python manage.py startapp 앱이름)
커맨드 창
C:\dev\mysite>python manage.py startapp blog
INSTALLED_APPS
에 반드시 등록해야 한다.)blog
를 setting.py
의 INSTALLED_APPS
에 반드시 등록
- 이렇게 5가지의 순서로 전달받아서 실행된다.
- 위와 같이 URL 매핑을 해준다.
- View 작성하기
- app 별로 등록하기
- 장고 앱 실행하기
- 웹브라우저에서 http://127.0.0.1:8000/blog/test1 요청
- 현재
db.sqlite3
를 사용
- 모델 클래스 작성
앱/models.py
에 정의django.db.models
의Model
클래스상속
blog/models.py
에 모델 클래스 작성from django db import models class Post(models.Model): title = models.CharField(max_length=250) body= models.TextField
- python manage.py makemigrations 앱이름
python manage.py makemigrations blog
- migrate 작업
python manage.py migrate blog
- 장고 쉘 커맨드에서 작성
python manage.py shell
from blog.models import Post Post.objects.all()
- 테이블 추가
p1 = Post() p1.title = 'aaa' p1.body= 'bbb'
p1 = Post()
,p2 = Post()
이런것은 인스턴스라고 생각)
- 2-1. 데이터 추가 방법 두가지(객체를 반환하냐 안하냐가 크다!)
- Model의
save()
는 객체를 반환하지 않음- Model의
create()
는 객체를 반환한다.
- Model의
save()
p4 = Post.objects.get(id=1) p4.title='test' p4.save()
- QuerySet의
update()
qs = Post.objects.filter(title = 'eee') qs.update(title='장고')
예시
- 정리 :
Model
에서는 직접 삭제,QuerySet
에서는 일괄 삭제를 해준다.
- 지금까지 한것을 admin 앱에서 조작
dev mysite>python manage.py migrate
- admin 앱 사용 계정 만들기
- admin 앱 url서버 실행
- admin 페이지 등록
템플릿이란?
- 사용자의 요청에 대해 뷰함수에서 응답하는 HTML 파일을 장고에서는 템플릿이라고 부릅니다.
- 템플릿 설정
- html 파일 만들기
- 파일 시스템 로더(검색 위치)
context는 뷰에서 템플릿으로 전달하는 데이터를 말합니다.
context는
key:value
형식의 딕셔너리 타입으로 지정합니다.path 중복 해결(아래와 같이 list.html 이 중복이라면 세분화해준다.)
- for
- if
- 템플릿 필터란
- 템플릿에서 {{ }} 문법은 {{}} 안의 값을 페이지에 출력하는 명령문입니다.
- 그런데 값을 출력할 때 그대로 출력하는 것이 아니라 가공을 해서 출력할 수 있도록 장고 템플릿은 "필터" 라는 것을 제공합니다. 필터는 출력 전 전처리 작업을 하는 함수입니다.
linebreaks
는 줄 바꿈{{ var |truncatechars:100 }}
는 문자열을 100자로 잘라서 출력합니다.
truncatewords
필터 : 변수를 50단어로 자르는 방법
장고의 템플릿 상속은 HTML 파일 간의 부모-자식 관계를 정의하는 방식으로 이루어집니다. 부모 템플릿은 공통 레이아웃을 정의하고, 자식 템플릿은 부모 템플릿을 기반으로 추가적인 내용이나 변경사항을 정의합니다.
부모 템플릿
- 부모 템플릿은 공통 레이아웃이나 구조를 정의하는 템플릿입니다.
- 주로 기본적인 HTML 구조와 헤더, 네비게이션 바, 푸터 등을 포함합니다.
- 부모 템플릿에서는
{% block %}
태그를 사용하여 자식 템플릿이 내용을 삽입할 수 있는 블록을 정의합니다.자식 템플릿
- 자식 템플릿은 부모 템플릿을 상속받아 특정 블록에 내용을 채웁니다.
- 자식 템플릿은
{% extends '부모_템플릿.html' %}
태그를 사용하여 부모 템플릿을 지정합니다.- 그런 다음
{% block %}
태그를 사용하여 부모 템플릿의 특정 블록을 재정의합니다.