👉🏻 ORM
- SQL
- Oracle, MySQL 등의 DB를 쓸 때는 DB를 다루는 쿼리문
- read, update, delete, modify ... 등
- Django는 이 SQL을 래핑해서
바깥에서 함수나 메서드를 이용해 안에 있는 SQL문이 실행될 수 있도록 만들었다- 이것이 ORM
- 프로그래밍에서 함수나 클래스 안의 메서드를 호출해서 쓰듯
ORM에 정의되어있는 함수나 메서드를 활용한다 - 내부적으로 알아서 함수가 SQL문을 실행해서
테이블 생성, 데이터 삽입/삭제/수정 등의 작업을 수행할 수 있다
👉🏻 프로젝트 생성하고 기본설정하기
🎮 프로젝트 생성하기
- 프로젝트를 생성할 디렉토리 안에서 해당 명령어 입력
- 생성됨
명령 프롬프트에서 해당 폴더로 이동한 뒤 dir을 찍어보면
- manage.py, tempPjt폴더가 있다
🎮 애플리케이션 만들기
- 프로젝트 내에서 위 명령어를 통해 앱을 만들 수 있다
- 생성됨
- 기본 생성되어야하는 폴더나 파일은 장고가 알아서 만들어준다
🎮 프로젝트명과 기본 폴더 이름 다르게하기
- 프로젝트가 들어있는 폴더로 올라가서
- 해당 명령어를 입력
🎮 애플리케이션 등록하기
- 전체 설정파일(settings.py)에 INSTALLED_APPS에 추가해야
비로소 그 프로젝트에서 다른 애플리케이션과 연결되는 애플리케이션에 등록된다?
- 애플리케이션의 이름은 풀네임을 모두 써주는 것이 좋다
apps.py에 보면 class명이 정의되어있다
이걸 그대로 가져다 쓰면 된다
🤔 예전에 배울 때는 앱 이름만 적었던 것 같은데..
"MyApp.apps.MyAppConfig"와 같이 앱의 설정 클래스를 INSTALLED_APPS에 추가하는 경우는 일반적으로 몇 가지 이유로 인해 사용됩니다. 이것은 Django에서 앱 설정을 불러오고 초기화하는 방법을 명시적으로 지정하는 것입니다.
- 명시적인 앱 설정 지정:
- INSTALLED_APPS에 앱을 추가할 때, 해당 앱의 AppConfig 클래스를 직접 지정함으로써 앱의 설정을 명시적으로 지정할 수 있습니다. 이는 Django가 앱을 로드하고 초기화할 때 특정한 설정을 사용하도록 강제하는 방법입니다.
- 앱 설정 클래스에 추가적인 설정 가능:
- 앱의 설정 클래스는 AppConfig를 상속받아 만들어지며, 이 클래스에 추가적인 설정을 정의할 수 있습니다. AppConfig 클래스를 사용하면 앱이나 모델 등의 초기화 코드를 추가할 수 있습니다.
- 앱의 별칭 제공:
- 이 방법을 사용하면 앱에 대한 별칭을 제공할 수 있습니다. 예를 들어, MyApp.apps.MyAppConfig 대신에 myapp만 쓸 수 있도록 설정할 수 있습니다.
예를 들어, 다음과 같이 settings.py에서 INSTALLED_APPS에 추가할 수 있습니다:
# settings.py
INSTALLED_APPS = [
# 다른 앱들...
'myapp.apps.MyAppConfig',
# 다른 앱들...
]
여기서 'myapp.apps.MyAppConfig'는 'myapp' 앱의 설정 클래스를 나타냅니다. 이렇게 하면 Django는 해당 앱을 로드하고, MyAppConfig 클래스를 사용하여 초기화합니다. 이는 Django의 기본 동작을 오버라이드하거나 특별한 설정을 추가하고자 할 때 유용합니다.
- MyApp으로 등록:
- 간편성: 단순히 "MyApp"만을 INSTALLED_APPS에 추가하는 경우, Django는 앱의 기본 설정을 사용하여 초기화합니다. 대부분의 경우에는 이 기본 설정으로 충분하며, 별다른 추가 설정이 필요하지 않을 때 사용됩니다.
- 앱 이름만으로 인식: Django는 앱의 이름만을 사용하여 해당 앱을 인식하고 초기화합니다. 그러나 앱 설정 클래스에 추가적인 설정이 필요한 경우에는 이 방법으로는 부족할 수 있습니다.
- MyApp.apps.MyAppConfig으로 등록:
- 명시적 설정 가능: "MyApp.apps.MyAppConfig"로 등록하는 경우, Django에게 앱의 설정을 명시적으로 지정합니다. 앱 설정 클래스에 추가적인 설정이나 로직이 있다면 이를 활용할 수 있습니다.
- 앱 설정 클래스 사용: 이 방법으로 등록하면 MyAppConfig 클래스의 코드가 실행되어 해당 앱에 대한 추가적인 초기화를 수행할 수 있습니다.
따라서 "MyApp"으로 등록하는 것은 간편하게 앱을 추가하는 방법이며, 대부분의 경우에는 충분합니다. 반면에 "MyApp.apps.MyAppConfig"로 등록하는 것은 앱에 대한 더 많은 제어와 설정을 가능하게 합니다. 선택은 프로젝트의 요구사항과 개발자의 선호도에 따라 다를 수 있습니다.
🎮 기본 사용자 및 그룹 테이블 생성
- Django의 migrations 시스템을 통해 데이터베이스 스키마를 관리하고 업데이트하는 데 사용됨
- django.contirb.auth앱에 정의되어 있다
✅ 관리자 계정 만들기
- 위 명령어를 입력하고 나오는 항목들에 기입만 하면 된다
✅ 서버 실행하기
- 관리자 화면으로 들어가기 위해 서버를 실행해야 한다
- 새로운 명령프롬프트를 열어서 작업한다
- 서버 관련 로그가 (실시간으로) 모두 여기 찍힐 것
- 프로젝트 디렉토리에서 명령어 입력
- 8000번 port 명시
- 이렇게 나오면 실행된 것
서버에 접근해보면
이렇게 기본 화면이 잘 나온다
서버에 로그도 찍히고 있음
뒤에 /admin을 붙여 관리자모드로 들어가
로그인을 하면
기본 사용자 및 그룹을 만들었기 때문에 그룹과 사용자가 이미 하나씩 만들어져 있다
👉🏻 테이블 생성
🧩 방법
models.py에 테이블 클래스 정의 후 admin.p에 등록한다
✅ 테이블 클래스 정의하기
- models.py에 클래스를 만든다
- student와 관련된 테이블을 만들고 싶으면 Student클래스를 만든다
- student.Model이라는 클래스를 상속받는다
- 속성을 정해준다
- 속성 = 테이블의 필드 (s_name, s_major ...)
- 속성을 정의할 때는 데이터타입을 명시해준다
- 데이터의 최대 길이나 디폴트값도 명시해준다
- __str__메서드
- 클래스를 만듦으로써 테이블이 생성됨
- 클래스 만든 뒤에는 반드시 __str__메서드를 만들어줘야한다
- 외부에서 이 클래스에 접근할 때 테이블의 이름을 반환해서 어떤 테이블인지 쉽게 알아볼 수 있다
- 해당 모델 인스턴스를 표현하는 문자열을 반환하는 것
모델 객체를 외부에서 출력할 때 이 메서드가 호출되어 해당 모델의 정보를 쉽게 확인할 수 있다 - Student 객체가 문자열로 표현될 때 어떻게 보여질지 → name을 반환하도록 정의한 것
- 모델을 사용할 때, 사용자가 student 객체를 출력하거나 로그에 남길 때 __str__메서드가 호출된다
🎮 실습
- class를 만듦으로써 DB에 테이블을 만든 것
- 클래스는 models 클래스를 상속해서 만듦
- 클래스의 속성은 테이블의 필드 이름
- 속성을 정의할 때는 데이터타입과 데이터 길이도 명시해준다
- str메서드를 넣어줘야 클래스를 완벽한 하나의 테이블로 적용 가능하다
✅ admin에 등록하기
🎮 실습
- 모델의 클래스(Student)를 등록해줘야한다
- 앱 디렉토리의 models.py 에 있는 Student 클래스를 가져와라
- 사이트에 Student를 등록하는 것
- 관리자모드에서 테이블 데이터베이스가 보여진다
✅ 변경사항 마이그레이션
- DB에 변경이 있었던 것이기 때문에 위 명령어로 변경사항을 migrate 한다
🎮 실습
(서버 켜 둔 명령어프롬프트 아니고 원래 작업하던 창!!)
- 변경사항이 있는지 확인하기
- 변경사항이 하나 있다고 나옴
- 변경사항 적용하기
- 적용됨
관리자 페이지에서도 확인 가능
안에는 아무런 데이터가 없다
데이터 생성을 안 했으니까!
👉🏻 레코드 다루기
🎮 Django shell모드 실행
- python shell과 같다고 생각하면 된다
shell모드로 진입
🧩 데이터 추가
- 패키지와 모듈을 가져온다
- 클래스 import
- Student 클래스에 레코드를 추가하기
- query string이라는 변수를 만들어 속성마다 값을 넣어준다
- Student 클래스를 생성하는데 그 안에 속성값을 기본적으로 넣어준 것(?)
- 아직은 데이터베이스에 반영되기 전, 메모리에만 올라갔다
- 이것을 DB에 반영하기 위해 query string 변수의 save메서드를 호출해주어야 한다
관리자 페이지에서 확인해보면
Student안에 홍길동이 추가되어 있다
홍길동 안의 내용들
- 다른 레코드 더 추가
총 3명의 데이터가 추가된 것을 볼 수 있다
🧩 데이터 검색
✅ 데이터 전체
QuerySet 타입으로 변환
- .objects.all()을 통해 데이터 전체를 가져올 수 있다
- 변수에 넣을 수 도 있다
- 타입을 출력해보면 QuerySet으로 나온다
- 데이터를 한 번에 가져올 때는 QuerySet이라는 데이터 타입으로 가져올 수 있다
✅ 데이터 한 개
Student 타입으로 변환
- .objects.get()을 통해 한 개의 데이터를 가져올 수 있다
- ()안에 필터(조건)를 넣어준다
- s_name이 honggildong과 같은 데이터만 가져오라
- 이 값은 models.py의 __str__메서드에서 반환된 값이다!
- type 확인해보기
- Student객체
- 한개의 데이터를 가져왔을 때는 클래스에서 나온 객체의 이름
- 클래스타입 자료형으로 Student가 반환(?)
🧩 데이터 읽기
✅ 데이터 다수
- 첨자([ ])를 이용해 접근한다 (인덱스)
- 0부터 시작
- 1번째는 홍길순
- 뒤에 속성을 붙여서 원하는 내용을 가져올 수 있다
- qs[1]의 이름
- qs[1]의 나이
- 기존 SQL문과는 조금 차이가 있음
- 오히려 프로그래밍 언어와 비슷
- 어떤 객체의 속성에 접근하는 것과 같이 dot(.)연산자를 통해 접근한다
✅ 데이터 한 개
- 한 개만 가져온 경우 첨자(인덱스)가 필요 없다
✅ 필터를 적용해 읽기
- 언더바 두 개!
- 나이가 22살보다 적은 사람을 가져와라
- 홍길동
- 나이가 22살보다 많은 사람을 가져와라
- 홍길자
- 나이가 22살 이하인 사람을 가져와라
- 홍길동 홍길순
- 나이가 22살 이상인 사람을 가져와라
- 홍길순 홍길자
✅ 데이터 정렬
- ()안에는 조건
- 내림차순의 경우 조건 앞에 대쉬(-) 붙여주기
- 나이 순(오름차순)정렬
- 나이 순(내림차순)정렬
🧩 데이터 업데이트(수정)
- 데이터 하나를 get()으로 가져옴
- 이름이 홍길동인 데이터를 가져와라
- 해당 데이터에 .연산자로 접근하여 값을 넣어주면 된다
- 전공 속성에 접근하고 할당연산자를 쓴 다음 내가 원하는 값을 써주기만 하면 된다
- 일반적인 프로그래밍 언어 같음
- 반드시 save() 해줘야 함
🧩 데이터 삭제
- 자료를 검색함
- filter를 통해 조건에 해당하는 것만 검색해옴
- 검색한 데이터는 qs변수에 담긴다
- 그 것을 delete()해주면 됨
- 주의: 안전장치가 없다. 정말 삭제할건지 확인하는 과정이 없기 때문에 데이터를 쉽게 날릴 수 있으니 유의
출처: https://youtu.be/fTWNpn0-fu0?si=pMDSQzBvyVRYT9V2
'백엔드 > django' 카테고리의 다른 글
[SGC]06_학사관리프로그램 만들기-II (0) | 2024.01.30 |
---|---|
[SGC]05_학사관리프로그램 만들기-I (1) | 2024.01.30 |
[SGC]03_Django 프로젝트 설계 (0) | 2024.01.27 |
[SGC]02_Django설치 및 프로젝트 생성 (0) | 2024.01.26 |
[SGC]01_웹프로그래밍과 Django (1) | 2024.01.26 |