👉🏻 Django Framework Flow

1️⃣ request
- 클라이언트가 데이터를 요청한다
- 클라이언트는 브라우저나 앱 등
- 요청할 때 URL로 요청한다
2️⃣ URLConf
- Django는 URLconf라는 방식
- urls.py안에 어떤 요청에 대한 처리 방법 명시
- URL과 Django 프레임워크에서 실행할 함수/메서드와 매핑되어있음
- 어떤 view / 어떤 함수가 실행될지 결정
- 사용자가 요청한 URL을 어떻게 파싱해서 그것으로 View한테 어떤 view가 실행되어야할지 설정
3️⃣ View로
- View 에서 실제 실행할 함수나 메서드 실행
4️⃣ Model에게 작업 위임
- DB 작업이 필요할 경우
- View가 Model에게 위임
5️⃣ DB에 접근
- 필요한 데이터 가공
6️⃣ 데이터 전달
- DB가 Model에게 가공된 데이터를 전달
7️⃣ 데이터 전달
- Model이 View에게 데이터 전달
- "당신이 원하는 데이터를 이렇게~ 뽑았다"
- View 는 추가로 필요한 보조 작업을 실행
8️⃣ Template에게 요청
- 사용자에게 응답을 하기 위해
- 가장 알맞은 html 폼을 달라
- Template 안에 있는 여러 html파일 중에 특정한 것을 뽑아
9️⃣ response
- 위에서 뽑은 html로 응답
👉🏻 URLconf (urls.py)
URL 맵핑
✅ 위치
tempProject/tempPjt/urls.py
- 프로젝트 폴더 내부 기본 폴더에 urls.py
🧩 urlpatterns

- 리스트 형태
- 컨테이너 자료형
- path 함수 이용
- 사이트가 복잡해지고 많은 기능이 있으면 내용이 많이 늘어난다
✅ path 함수
- 콤마(,)로 구분자 이용
- 앞 부분이 클라이언트가 요청한 URL
- path('student/register/', views.student_register)
- 서버에 미리 '만약 클라이언트가 http://도메인/student/register로 접속한다면 나는 view안에 있는 student_register 함수를 실행하겠다' 고 말해두는 것
- 앞 부분이 URL(클라이언트 요청 URL)
- 뒷부분이 view(함수 또는 메서드)
🧩 코드 살펴보기

- admin: 장고는 기본적으로 관리자 모드를 제공하고 있다
- url에 admin이라고 들어오면 admin 사이트로 유도하는 view가 실행된다
- student라고 들어오면 students 디렉토리에 있는 urls.py로 가라

- 들어온 url에 따라 어떤 함수가 실행될지를 미리 정의
- student 뒤에 reg로 들어왔다면 regStudet(학생 등록 함수)가 실행되도록
- 나머지에 대해서도 마찬가지
- <str:name>의 경우 요청이 들어올 때 앞에 값이 붙는 것
- name에 있는 값이 뒤에 있는 함수의 매개변수가 된다
👉🏻 View (views.py)
- URLconf에서 url요청에 따른 실행해야할 함수
✅ 위치
tempProject/students/views.py
🧩 함수 정의

- student/register로 url 요청이 들어왔다면 view 모듈에 있는 student_register함수가 실행되면 된다
- 함수 이름 맞춰줘야함
- 매개변수로는 request 객체가 들어올 수 있다
- 함수 안에 DB 작업이나 사용자가 원하는 결과를 낼 수 있는 작업을 정의한다
- 그것을 HttpResponse()객체로 반환한다

- view에서 모든 작업이 끝난 후 Template에서 적합한 템플릿을 가져옴
- 그 템플릿에 정보를 담아 client에게 response해준다
- 뷰는 전체적인 지휘자/관리자라고 할 수 있다
- 클라이언트와 서버의 관계 관리
- Model과의 관계 관리
- Template와의 관계도 관리
클라이언트의 요청에 따른 애플리케이션 실행 결과를 Template(html), 에러 메시지 등을 이용해 클라이언트에게 response한다
👉🏻 Model (models.py)
✅ 위치
tempProject/student/models.py
🧩 ORM (Object Relational Mapping) 사용

- class Student에서 Student가 DB 이름
- DB를 만들고 나서 DB 안에 테이블을 만드는 방식
- ORM방식
- 쿼리스트링 문법을 이용하지 않고 간단한 방식으로 만든다
- CharField: 필드명
- 5개의 필드가 존재하는 것
- 각 필드에 해당하는 데이터타입 (문자/숫자)과 범위/기본값
- Create Table과 같은 것
- 그게 class로 만들어진 것

- Model 클래스를 상속받아서 내가 생성하고자 하는 테이블을 생성함
- 테이블 이름은 애플리케이션이름_클래스명
- DB가 있고, DB를 다루기 위한 언어 SQL 쿼리문이 있다
- 이를 클래스로 매핑해서 조금더 쉽게 사용할 수 있도록 만들어진 방식이 ORM방식이다
👉🏻 Template (*.html)
✅ 위치
- 애플리케이션 디렉토리 → templates라는 디렉토리 생성
- 개발자가 임의로 만들어서 쓰는 것
- 이 안에 개발자가 정한대로 경로와 html 문서를 만들어서 사용함
- 장고가 만들어준게 아님!!
- 그렇기 때문에 장고가 이 templates 파일들을 찾을 수 있도록 알려줘야 한다
🧩 TEMPLATES에 추가하기
tempProject/tempPjt/settings.py 에서 Template 파일 검색 디렉토리 정의

- settings.py: 프로그램의 전체적인 환경설정
- INSTALLED_APPS: 설치된 앱들의 목록을 적어줘야 한다

- Students앱의 StudentsConfig라고 명시되어있음
- 이 경로의 이름은 내가 만든 애플리케이션 안에 apps.py라는 기본 파일이 생성된다
- 그 안에 현재 해당하는 애플리케이션이 class로 정의되어 있고
출처: SEOUL G-캠프 유튜브 - 그것을 그대로 가져와서 넣어주면 된다
- package name까지
- 그 외에 나머지는 기본 생성되는 것
👉🏻 프로젝트 설정
✅ 위치
/tempPjt/settings.py
프로젝트의 전체적인 설정을 담당한다
🧩 모든 애플리케이션 설정 파일에 등록
✅ 애플리케이션의 설정 클래스를 이용한 등록

- 애플리케이션을 만들고 나면 그 앱의 apps.py에 들어가서
- 클래스명(패키지명까지)을 settings.py의 INSTALLED_APPS에 명시해준다
🧩 개발모드와 운영모드 설정


✅ 개발모드
- settings.py 초반에 DEBUG모드가 True로 설정되어있다
- 아직 상용화 되지 않은 웹서비스
✅ 운영모드
- DEBUG모드가 False로 되어있다면 운영모드
- 상용화 모드
- 상용화되어있다는건 서버 고유의 IP주소가 있다는 것


✅ 개발모드
- 비어있거나 / Localhost라고 입력하면
- 로컬에서 127.0.0.1 혹은 개인 DH서버로부터 받은 사설 IP로 웹서비스를 접근해 테스트해볼 수 있다
✅ 운영모드
- 상용화된 서비스의 고유 IP주소를 명시
👉🏻 기본 사용자 및 그룹테이블 생성
- 장고의 좋은 기능
- 다른 프레임워크는 관리자모드를 따로 만들어줘야함
- 홈페이지를 두 개 만드는 / 웹서비스를 두 개 만드는 것과 다름 없음
- 장고는 빠른 생산성을 위해 기본적으로 관리자모드를 제공하고 있다
- 프로젝트를 하나 만들면 자동으로 관리자모드가 생성됨
🧩 관리자모드 사용하기
✅ 사용자 및 그룹테이블 생성

- 기본적으로 사용하는 사용자
- 그룹테이블
- 관리자들이 모여있는 그룹테이블
- 프로젝트 안에 들어가서 python manage.py를 migrate

- 하면 관리자 모드가 열린다

- DB도 생성한다

- DB 변경이 있을 때 마다 위 명령어로 models.py의 내용을 적용시킨다
👉🏻 관리자 계정 생성 및 서버 구동
🧩 관리자 계정 생성

- 기본 사용자와 그룹 테이블을 생성하고나서 관리자모드를 들어가게 되는데
- 관리자모드가 바로 들어가게 되는 건 아니다
- 일단 생성은 됐음
- 하지만 관리자 계정과 암호가 필요
- manage.py를 이용해 계정과 암호를 설정해줄 수 있다

- 이름은 무엇으로 할건지
- 메일 주소는 무엇인지
- 비밀번호는 무엇으로 할건지 (+확인)
🧩 서버 구동
- 파이썬은 내가 따로 서버를 만들어 놓지 않아도 기본적으로 테스트 서버를 제공해준다

- manage.py를 통해 이용할 수 있다

- 웹사이트에서 127.0.0.1(내 로컬):8000(port번호)를 통해 접근할 수 있다
모의로 테스트를 해볼 수 있다
🧩 생성 이후
✅ client

- 클라이언트에게 보여지는 화면
✅ 관리자

- 뒤에 admin을 붙이면 관리자 화면
- 관리자 계정 생성시 만들었던 계정과 암호를 입력하면 관리자모드로 들어갈 수 있다
- 관리자모드로 들어가면 그룹과 사용자에 대한 테이블이 만들어져 있다
- DB가 만들어져 있음
- 사용자 및 그룹테이블 생성을 했기 때문에 기본 테이블이 만들어진 것
- 이 외에 애플리케이션을 위한 테이블을 만들 경우 계속 추가된다
출처: https://youtu.be/Go-NZbOgcUE?si=qJzBzs2jBY4CtHAD
'백엔드 > django' 카테고리의 다른 글
[SGC]05_학사관리프로그램 만들기-I (1) | 2024.01.30 |
---|---|
[SGC]04_데이터베이스(ORM) (2) | 2024.01.30 |
[SGC]02_Django설치 및 프로젝트 생성 (0) | 2024.01.26 |
[SGC]01_웹프로그래밍과 Django (1) | 2024.01.26 |
[django다시시작하기] 들어가면서 (1) | 2023.10.11 |