일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- decorator
- DP
- wecode
- 자바스크립트
- clone-coding
- clone coding
- 윈도우우분투듀얼부팅
- 파이썬
- 인증인가
- 백준
- 코딩테스트파이썬
- QuerySet
- JavaScript
- 파이썬입출력
- 자료구조
- 알고리즘
- 해시충돌
- CSS
- *args
- **kwargs
- docker
- RESTfulAPI
- Python
- promise
- 파이썬리스트컴프리헨션
- 인터넷 네트워크
- bcrypt
- 리스트컴프리헨션
- 파이썬문법
- django
- Today
- Total
개발기록장
[Django] 웹 프레임워크 Django 기초 개념 본문
[목차]
1. MTV 개념
2. Django Flow
3. Django Project
4. Django Application
1. MTV 개념
- 전통적인 웹 프레임워크의 모델 : MVC (Model, View, Controller) 패턴
-
M = 데이터베이스 구축
-
V = HTTP 요청을 처리하는 웹 템플릿 시스템. 데이터를 적절하게 사용자에게 보여주는 역할
-
C = URL의 라우팅을 처리하는 URL 컨트롤러 (Controller)
- Django 모델 : MTV(Model, View, Template) 패턴
패턴과 유사하지만 Django에서는 Controller의 기능을 프레임워크 자체에서 하기 때문에 MTV 패턴이라고 한다.
-
M = 데이터베이스 구축
-
T = MVC에서 View 역할을 Django에서는 Template이 함. 즉 사용자에게 보여주는 화면을 처리
-
V = 웹 프로젝트를 이루고 있는 어플리케이션들의 제어 흐름과 로직을 처리
-
전반적인 flow는 아래와 같다. (django 웹 프로젝트가 구동되는 방식)
-
웹 브라우저에서 사용자 요청이 들어오면 django 서버로 들어와서 가장 먼저 URL Dispatcher에서 사용자가 요청한 URL을 분석
-
분석한 URL을 가지고 그에 적합한 View로 보냄
-
View는 어떤 데이터가 필요한지 분석 및 처리
-
Model에서 실제로 DB와의 커넥션이 이루어짐 (DB에서 데이터를 가져옴)
-
DB에서 Model로 필요한 데이터를 보내줌
-
Model이 View에 데이터를 전달해주면, View는 데이터를 요청에 맞게 처리하여 Template으로 보냄
-
Template단에서 HTML, JS와 같은 User Interface를 만들어서 웹 브라우저로 넘겨줌
2. Django 상세 flow
장고로 웹 프로젝트를 생성하면 안에 다양한 파일들 생성하게 된다.
위 사진에서 녹색으로 표시된 파일들이 우리가 주로 다루게 될 파일이다.
-
wsgi.py : WSGI (web server gateway interface)에 관한 설정 파일. 브라우저에서 요청을 보내면 WSGI로 신호가 들어오는데, 웹서버와 장고를 결합시켜주는 역할을 한다. 웹서버에서 적절한 설정만 해주면 WSGI를 통해 장고와 결합된다.
-
urls.py : URL Dispatcher 역할. 정규표현식에 맞게 url패턴을 적으면 요청 url에 맞는 view로 연결시켜줌
-
view.py : 사용자 요청에 맞는 데이터 CRUD 로직 처리.
-
models.py : 클래스와 변수를 지정하면 데이터베이스와 연결되어(연결은 managers가 처리) 테이블과 필드로 매치됨
-
html파일 등 template : view에서 처리한 로직은 사용자에게 화면으로 보여주는 역할
-
forms.py : 웹에서 form을 통해 입력을 받을 때 사용. model과 template을 연결하여 form과 데이터를 쉽게 관리할 수 있다.
3. Django project
** 프로젝트 생성 전에 python 가상 환경을 세팅하고 하는 것이 좋다.
프로젝트마다 파이썬 버전, 사용하는 패키지 등이 다르기 때문에 나중에 배포할 때 다른 개발자들과 환경이 꼬일 수 있기 때문이다. (프로젝트마다 버전 컨트롤이 필요하다는 의미)
- 용어 정리
-
Project = 하나의 웹 사이트
-
App = 의미있는 하나의 기능 단위. Django 프로젝트는 app 단위로 관리된다.
- Django 설치
가상 환경을 활성화시킨 후 Django를 설치해보자. 설치는 pip로 간단하게 할 수 있다.
pip install django
설치 후 pip freeze로 설치가 되었는지 확인할 수 있다.
- 프로젝트 만들기
django-admin startproject mysite
mysite라는 이름의 프로젝트를 만들었다. 프로젝트를 만들면 아래와 같은 디렉토리 구조에 파일들이 생겨난 것을 확인할 수 있다.
여기서 프로젝트 이름과 같은 가장 상위 디렉토리를 보통 '프로젝트 루트 디렉토리'라고 부른다.
이 루트 디렉토리 안에서 django-admin 명령어가 실행이 된다.
구조를 살펴보면 각각의 '*.py' 파일이 모듈이고 루트 디렉토리 안에 있는 또 다른 mysite는 그 안에 __init__.py 파일이 있는 것을 봐서 하나의 패키지임을 알 수 있다.
프로젝트 루트 디렉토리 하위에 있는 각각의 파일들의 역할은 다음과 같다.
-
manage.py : django에서 쓰는 명령어 모음. 이 파일이 있는 곳이 django 프로젝트의 루트 디렉토리다.
-
주요 명령어 - python manage.py [아래 명령어]
- startapp : 앱 생성
- runserver : 서버 실행
- createsuperuser : 관리자 생성
- makemigrations app - app의 모델 변경 사항 체크 및 models.py 파일에 제대로 작성했는지 체크
>> app 디렉토리 아래의 migrations 디렉토리에 변경사항을 기록하는 파일들이 생성된다.
- migrate : 변경 사항을 DB에 반영
- shell : django가 import 되어 있는 shell
-
-
mysite/ : 이 디렉토리 내부에는 프로젝트를 위한 실제 파이썬 패키지들이 저장된다. mysite.urls와 같은 방법으로 이 프로젝트 어디에서나 파이썬 패키지들을 import 할 수 있다.
-
mysite/__init__.py : mysite 디렉토리가 패키지라는 것을 알려주는 단순한 용도
-
mysite/settings.py : 전체 프로젝트를 관리하는 설정들이 담긴 설정 파일 (중요)
-
settings.py 주요 설정 내용
- BASE_DIR : 루트 디렉토리 지정
- DEBUG : 디버그 모드 설정. 개발할 때만 True로 설정해야 한다. True로 배포하면 해킹 위험이 매우 큼
- ALLOWED_HOSTS : 여기에 설정된 호스트만 접근 가능
- INSTALLED_APPS : pip로 설치한 앱 또는 본인이 만든 app을 반드시 추가해줘야 함
- ROOT_URLCONF : urls.py 파일 위치 지정
- DATABASES : 데이터베이스 엔진 연결 설정
- LANGUAGE_CODE : 서버의 기본 언어 설정
- TIME_ZONE : 서버의 타임존 설정
- STATIC_URL : 정적 파일(css, javascript, image 등) 위치 설정
-
-
urls.py와 wsgi.py는 위에서 설명한 내용과 같음
4. Application
- Application 만들기
하나의 프로젝트 안에는 다수의 app을 만들 수 있다. 루트 디렉토리에서 아래 명령어로 프로젝트의 app을 만들어보자.
python manage.py startapp polls
polls라는 이름의 app을 생성했다.
app을 생성하면 아래와 같이 app이름의 디렉토리가 생긴다. 이 디렉토리에도 역시 하나의 패키지다.
- app 안에 있는 파일들
-
admin.py : 관리자 권한을 가지는 사용자가 볼 수 있는 페이지에 관련된 설정 파일
-
models.py와 views.py는 위에 설명한 내용과 같음
-
migrations/ : 해당 App에 관련된 DB의 변경사항들을 기록해두는 파일들(0001_initial.py 등)이 쌓이는 디렉토리다.
** db.sqlite3 파일은 파일 기반인 sqlite 파일. 즉, DB 파일이다. 서버를 한 번 실행하면 생긴다. Django는 default DB가 sqlite로 설정되어 있다.
- INSTALLED_APPS에 추가
app을 생성한다고 해서 Django가 바로 새로 생성된 app을 인식하지는 않는다.
따라서 항상 app을 생성하고 settings.py 파일에 INSTALLED_APPS에 새로 생성한 app이름을 적어줘야 Django가 이를 app으로 인식한다.
'TIL > Django' 카테고리의 다른 글
[Django] 인스타그램 클론 코딩(1) - 회원가입 기능 구현 (0) | 2021.02.02 |
---|---|
[Django] ManyToManyField 설정과 데이터 조회 방법 (0) | 2021.01.27 |
[Django] QuerySet 메소드 정리 (2) - CRUD (5) | 2021.01.25 |
[Django] QuerySet 메소드 정리 (1) - 연결된 테이블에서 데이터 조회(정참조/역참조) (1) | 2021.01.21 |
[Django] Miniconda를 이용하여 파이썬 가상환경 설정하기 (1) | 2021.01.20 |