Django의 기본 컨셉..
파이썬 기반의 웹 풀스택 프레임워크
웹 사이트는 사용자의 다양한 요청을 서버에서 처리하고 그 결과를 사용자가 볼 수 있는 형태로 다시 만들어 보내주는 기능이 필요하다. 익명에게 노출되는만큼 성능과 보안도 신경 써야 하는데, 이러한 웹 사이트 구현에 필요한 여러 기능을 쉽게 만들 수 있게 해주는 도구가 웹 프레임워크이다.
회원가입, 탈퇴, 게시물 작성과 수정, 댓글 달기 등은 대부분의 웹 사이트에서 제공하는 기본 기능이다. 이러한 공통 기능을 미리 개발한 상태로 개발하는 것이 웹 프레임워크이다.
즉, 웹 프레임워크 사용 시 미리 개발되어 있는 기능을 가져와서 추가하면 되는 것
파이썬 프로젝트를 쉽게 발전시킨다.
파이썬은 다른언어에 비교하여 배우기 쉽고 활용범위도 넓다. 웹크롤링 이용하여 데이터 수집, 업무 자동화 등에 활용가능하고, 데이터분석과 인공지능 분야에서도 활용한다. 따라서 장고 사용 시 기존 파이썬 프로젝트를 웹 기반으로 확장하기 용이하다.
웹 개발 진입장벽 ↓
웹 개발을 위해서는 컴퓨터를 서버로서 작동할 수 있도록 아파치나 Nginx같은 서버 소프트웨어가 필요하고 DB도 필요하다. 장고는 서버 프로그램 x DB설치 x
관리자 페이지와 보안 기능 제공
장고는 프로젝트 생성 시 관리자 페이지를 자동 생성하고 보안가이드를 제공한다.
🤷🏻♀️ Django와 Flask?
Django | Flask | |
---|---|---|
제공기능 | 다양하다 | 비교적 적다 |
자유도 | 낮다 | 높다 |
예시 | 인스타그램, 유튜브, 스포티파이 등 | 넷플릭스, 우버 |
플라스크는 장고보다 제공기능은 적지만 개발 시 프레임워크에 덜 의존적인 개발이 가능하다. 간단한 웹페이지 제작 시 플라스크, 여러기능 필요한 웹페이지 제작 시 장고 사용하면 좋다
python -m django --version
프로젝트 생성django-admin startproject mysite
앱 생성python manage.py startapp photo
프로젝트가 생성완료되면 아래와 같은 결과가 나타난다. (프로젝트명이 mysite)
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
개발 서버를 열기 위해서 아래 명령어를 사용한다.
python manage.py runserver
실행완료되면 이렇게 http://127.0.0.1:8000/
에 페이지가 열린다.
그리고 settings.py 파일에 앱을 추가해준다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'photo' # 추가
]
장고에서 프로젝트와 앱은 개발자가 정의하고 사용하는 것에 따라 그 구성이 달라진다
프로젝트
하나의 큰 서비스 개념
만들고자 하는 것이 웹 서비스라면 웹 사이트가 프로젝트가 되는 것
앱
프로젝트 내 기능과 같은 요소들을 일정 기준으로 구분해놓은 단위
이런 늭낌..
암튼 지맘대로다
Django와 관련된 명령어를 써야할 때 사용하는 파일
django.core.management 모듈로부터 execute_from_command_line 함수를 가져와서 사용자가 입력한 명령어를 처리한다.
건들 일 없다.
프로젝트 설정 파일
주로 사용하는 옵션들은 다음과 같다
DEBUG = TRUE
디버깅 모드 옵션
에러 메세지를 웹 페이지에 출력한다.
ALLOWED_HOSTS = []
허용할 호스트 주소에 대한 내용 입력
프로젝트를 배포하는 경우 배포하는 서버의 호스트 주소를 해당 옵션에 입력해야 외부에서 프로젝트로 접속이 가능하다.
INSTALLED_APPS
설치된 앱들을 등록하는 옵션
Django 프로젝트에서 생성한 앱들을 이곳에 선언해주어야 프로젝트에 등록되어 정상적으로 실행된다.
프로젝트의 url 주소를 등록하는 파일
Django는 MTV 패턴으로 개발을 진행한다.
어떠한 패턴을 개발을 진행한다는 것은, 작업을 수행함에 있어 일정한 규칙과 정해진 방식이 있고, 해당 방식을 따라가며 중간중간 해당 개발 패턴이 요구하는 내용을 순서대로 채워가며 개발을 하는 것으로 생각하면 된다.
이케아 가구 조립을 생각해보면 어떻게든 만들면 되긴하는데 설명서대로 하면 편한 것 처럼... 근데 이케아는 하란대로 해도 안되자나
아무튼 개발 패턴은 여러 종류가 있고 이러한 패턴들은 특정 문제를 해결하기 위한 다양한 방법론 중 하나인 것이다.
문제를 해결하기 위해 다양한 각도에서 접근해봤더니 각 코드들이 각자 맡은 역할이 있고, 자신의 역할만을 수행하면서 독립된 형태로 동작하는 형태로 자리잡아 간 것. 이렇게 특정 패턴을 유지하면 추후 유지보수 시에 전체적인 흐름 파악이 쉬워진다.
그러니까 지맘대로 코드를 짜지 말자 어? 조별과제 어?! 🥺
아무튼...!! MTV 패턴은 Model, Template, View의 약자다. 결론만 보자면 Model은 애플리케이션의 데이터 관련부분, Template는 사용자 출력부분, View는 Model의 데이터를 Template로 전달하고 Template에서 발생하는 이벤트를 처리하는 부분이다.
애플리케이션의 데이터 관련 부분을 다루는 영역이다. 데이터베이스에 저장될 데이터의 형식의 정의하고 관련 기능을 작성하는 영역이다.
현실 개체의 특징을 추출하여 컴퓨터가 알아들을 수 있도록 변환해주는 과정을 모델링이라고 하는데, 개체를 모델링한 결과물이 모델이다.
예를 들어 사람이라는 개체를 코드로 구현하기 위해 아래와 같은 속성을 추출할 수 있다.
또는 사용자를 모델링하면 ?
즉 사람
과 사용자
는 모델이되고, 모델 내부의 이름, 성별 등은 속성이 되는 것.
쟤네를 이용하면 DB의 테이블 구조로 쉽게 변환이 가능하다.. 이렇게..
아이디 | 이름 | 비밀번호 | 이메일 | 성별 |
---|---|---|---|---|
id1 | name1 | password123 | test@email.com | M |
id1 | name2 | password456 | test2@email.com | F |
이처럼 모델을 데이터베이스에 적용시키는 과정을 마이그레이션 Migration 이라고 한다.
모델은 하나의 클래스로 구현하면 된다.
photo/models.py 파일을 열고 모델 클래스를 생성한다.
from django.db import models
class Photo(models.Model):
title = models.CharField(max_length=50)
author = models.CharField(max_length=50)
image = models.CharField(max_length=200)
description = models.TextField()
price = models.IntegerField()
models.Model 클래스를 상속받아서 모델을 정의한다.
모델을 DB에 적용시키는 과정을 마이그레이션이라고 하고, 모델의 생성 또는 수정과 삭제 같은 변화가 발생 시 마이그레이션 과정을 통해 모델의 변경 사항을 적용시킨다.
마이그레이션 과정을 세분화하면 아래와 같다.
makemigrations
모델의 변경 내용을 기록하여 파일로 만드는 과정
migrations 폴더 내에 파일을 생성한다.
migrate
makemigrations에서 생성된 파일들을 실제로 실행시켜 DB에 변경사항을 적용한다.
python manage.py makemigrations
python manage.py migrate
admin.py 파일에 들어가면 아래와 같은 내용이 적혀있다.
from django.contrib import admin
# Register your models here.
모델을 등록하라고 하시네요.
한다.
from django.contrib import admin
from .models import Photo
# Register your models here.
admin.site.register(Photo)
해주고 실행해보겟다
서버 실행하고 브라우저 주소창에 서버 url 뒤에 /admin 입력해주면 이런 페이지가 나타난다.
근데 관리자 계정 생성을 깜빢 했슴 다시 만들러간다
python manage.py createsuperuser
명령어 입력하라고 하라는대로 하면 됨
다시 서버 켜서 로그인~!
Photo가 있는 걸 확인할 수 있다..
사용자에게 보이는 부분..
즉 HTML...
따지자면 프론트...
별거 없다
그냥 HTML 작성이랑 똑같은데 Template Tag를 사용할 수 있다는 게 차이점
템플릿 태그를 사용하면 데이터를 바로 받아서 사용할 수 있다.
원래 HTML은 정적인 웹 페이지를 보여주기만 하기 때문에 특정 데이터를 넘겨받아서 이를 화면에 출력하려면 자바스크립트 같은 도구가 필요한데, Django는 템플릿 태그를 사용해서 바로 파이썬으로부터 데이터를 넘겨받을 수 있게 된다.
개이득
{}
로 감싸서 사용하고 for문이나 if문 같은 파이썬 구문도 사용이 가능하다. ejs라고 생각혀
템플릿과 모델 사이를 연결해준다. 프론트엔드와 백엔드 사이의 요청 / 응답 개념을 수행한다고 생각하면 된다
뷰는 함수형 뷰와 클래스형 뷰로 구분된다.
원래 공부는 만들면서 하는법
레츠기릿