[백엔드 기초] 2-1. Django
Web/Backend

[백엔드 기초] 2-1. Django

Django: 파이썬 기반 웹 프레임워크

 

MVC(MTV) : 디자인 패턴

Model

데이터를 입력하고 전송받으면 데이터베이스 서버에 저장되는데 이것을 다루는 것이 모델.

안전하게 데이터를 저장함.

View

데이터를 적절하게 가공/처리 후 템플릿으로 넘겨 유저에게 보여줌.

유저가 원하는 형태의 데이터로 전송.

Controller (Template in Django)

사용자에게 보여지는 부분.

사용자의 입력과 이벤트에 반응하여 Model과 View를 업데이트.

 

Project & App

하나의 프로젝트가 하나의 웹사이트 역할.(각종 앱+설정들)

프로젝트 안에 다양한 기능이 있으며, 의미있는 특정 기능을 app으로 관리함.

 

 

작동 원리

 

 

  • WSGI(wsgi.py)웹 서버와 장고를 적절히 결합시켜 주는 역할.
  • URL RESOLUTION(urls.py)wsgi.py에서 신호가 들어오면 가장 먼저 받는 곳. 정규표현식으로 구현되어 있음.
  • VIEW(views.py)실질적으로 파이썬 코드를 많이 작성 하는 곳. view에서 판단을 함. 사용자의 요청에 의해서 데이터베이스에 데이터를 입력을 하든지, 아니면 데이터베이스로 부터 데이터를 가지고 와서 사용자에게 리스트를 보여줄건지. views.py가 결정을 하고 models.py에 신호를 보냄
  • MODEL(models.py)데이터베이스와 관련된 다양한 동작을 수행하게 됨.
  • TEMPLATE(example.html)html파일안에 Control과 관련된 다양한 로직을 삽입 할 수 있음. view에서 받은 데이터를 어떻게 html파일에 잘 보여줄지 하는 스크립트 파일들이 여기에 담겨짐. 비교적 손쉽게 다룰수 있음. 사용자의 인터페이스에 적절하게 구성을 해주고 그 구성된 정보가 web server로 감.

 

Settings.py(프로젝트 환경 설정 파일)

DEBUG

  • 디버그 모드 설정
  • 디버그모드 트루로 두면 에러 확인 가능
  • false로 해둬야 배포시에 사용자들이 확인할 수 없다

INSTALLED_APPS

  • pip로 설치한 앱 또는 본인이 만든 app을 추가

MIDDLEWARE_CLASSES

  • request와 response 사이의 주요 기능 레이어
  • 인증, 보안 관련 내용들을 다룸

TEMPLATES

  • django template 관련 설정, 실제 뷰(html, 변수)

DATABASES

  • 데이터베이스 엔진의 연결 설정

STATIC_URL

  • 정적 파일의 URL(css, javascript, image, etc.) 설정

 

Manage.py(프로젝트 관리 명령어 모음)

주요 명령어

  • startapp: 앱생성
  • runserver: 서버 실행
  • createsuperuser: 관리자 생성
  • makemigrations app: app의 모델 변경 사항 체크
  • migrat: 변경 사항을 DB에 반영
  • shell: 쉘을 통해 데이터를 확인
  • collectstatic: static 파일을 한 곳에 모음

 

ch3 디렉토리

프로젝트 관련 디렉토리 및 파일을 모아주는 최상위 루트 디렉토리.

보통 settings.py 파일의 BASE_DIR 항목으로 지정됨

  • db.sqlite3SQLite3 데이터베이스 파일
  • manage.py장고의 명령어를 처리하는 파일
  •  

[프로젝트명] 디렉토리

프로젝트명으로 만들어진 디렉토리. 프로젝트 관련 파일들이 들어있음.

  • __init__.py디렉토리에 이 파일이 있으면 파이썬 패키지로 인식함
  • settings.py프로젝트 설정 파일입니다.
  • urls.py프로젝트 레벨의 URL 패턴을 정의하는 최상위 URLconf.
  • 보통은 애플리케이션 디렉토리마다 하위 urls.py파일이 또 있음.
  • wsgi.pyApache/Nginx와 같은 웹 서버와 WSGI규격으로 연동하기 위한 파일.
  •  

[애플리케이션명] 디렉토리

애플리케이션명으로 만들어진 애플리케이션 디렉토리.

해당 애플리케이션 관련 파일들이 들어있음.

  • __init__.py디렉토리에 이 파일이 있으면 파이썬 패키지로 인식함.
  • admin.pyAdmin 사이트에 모델 클래스를 등록해주는 파일.
  • apps.py애플리케이션의 설정 클래스를 정의하는 파일.
  •  

migrations 디렉토리

데이터베이스 변경사항을 관리하기 위한 디렉토리.

데이터베이스에 추가,삭제,변경 등이 발생하면 변경 내역을 기록한 파일들이 위치함.

  • models.py데이터베이스 모델 클래스를 정의하는 파일.
  • tests.py단위 테스트용 파일.
  • views.py뷰 함수를 정의하는 파일 .함수형 뷰 및 클래스형 뷰 모두 이 파일에 정의함.

 

static 디렉토리

프로젝트를 진행하면서 추가됨.

CSS, Image, Javascript 파일들이 들어있으며 보통은 프로젝트 레벨과 애플리케이션 레벨로 구분하여 ch3/static 및 ch3/polls/static 위치에 생성됨.

 

logs 디렉토리

프로젝트를 진행하면서 추가됨.

로그 파일들이 들어있으며 로그 파일의 위치는 settings.py파일의 LOGGING 항목으로 지정함.

 

모델 Model

  • 모델이란 부가적인 메타데이터를 가진 데이터베이스의 구조(layout) --> 장고는 ORM으로 데이터베이스의 데이터를 관리함.
    • ORM, Object-Relational Mapping객체과 관계형 데이터베이스의 데이터를 매핑해서 sql 쿼리문을 작성하지 않고 쉽게 데이터를 다룰 수 있게 해주는 것을 의미.
  • 각 모델은 django.db.models.Model 이라는 클래스의 서브 클래스로 표현된다
  • 모델을 선언한 뒤에는 데이터베이스에 해당 모델을 위한 테이블을 생성해야 하므로 migrate를 해줘야 함.

 

from django.db import models  
classProfile(models.Model) :     
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')    
    image = models.ImageField(upload_to='profile/', null=True)     
    nickname = models.CharField(max_length=25, unique=True, null=True)    
	message = models.CharField(max_length=120, null=True)

 

모델 활성화 하기

  • 우선 모델의 app을 settings.py의 INSTALLED_APP = [] 목록에 적어서 등록해야 함
  • makemigrations <appname> 명령어를 통해 모델의 변경사항을 파악
    $ python manage.py makemigrations <appname>
    • migration : 장고가 모델의 변경사항과 데이터베이스 스키마를 저장하는 방법을 의미.
  • migrate
    • migrate 명령어를 통해서 자동으로 migration을 실행시켜주고, 데이터베이스 스키마를 관리해줌.
    • sqlmigrate는 내부에서 어떤 sql 문장을 실행하는지 직접 보여줌.
    $ python manage.py migrate <appname>
    $ python manage.py sqlmigrate <appname>
728x90