[Pre-course] 2021. 10. 13
Django
라이브러리? 프레임워크?
참고 자료 : 노마드 코더
둘의 차이점을 찾기 위해 구글에서 오랜 시간 서핑을 했지만 위 유튜브에서 가장 많은 이해가 되었다
간단하게 요약하면 개발자(나)가 원할 때 불러서 사용하는 것이 라이브러리, 규칙에 따라 작성하면 실행되는 것이 프레임워크이다
장고는 프레임워크이며 이해가 잘 되지 않는다면 영상을 한 번 보는 것을 추천한다 ( 길이 : 5분 가량)
MTV 패턴
참고 자료 : docs.djangoproject.com 용어
MTV는 Model-Template-View를 말한다
MVC, Model-View-Controller와 유사하지만 장고를 설명하는 것에 있어 더 적절하다고 한다
그렇다면 View를 Template이라고 부르고, Controller를 View라고 부르는 이유는 무엇일까?
docs.djangoproject.com 자주 묻는 질문을 보도록 하자
Model
: DB에 데이터를 저장하는 것으로 각각의 모델은 파이썬의 클래스로 정의된다
모델은 저장하고 있는 데이터의 필수적인 필드와 동작을 포함하고 있고 각각의 모델은 각각 하나의 DB Table이 된다
*장고는 ORM(Object Relational Mapping)을 지원하기에 파이썬 코드로 DB를 조작할 수 있다
Template
: HTML 파일로 데이터를 표현하기 위한 형식, 사용자에게 보여지는 화면을 의미한다
웹 시스템의 역사에서 현재 모던 웹에서는 사용하지 않고 Model과 View에서 데이터를 json 형식으로 반환한다View
: 페이지 렌더링을 담당한다 (템플릿)
항상 템플릿으로 렌더링 하는 것은 아니고 백엔드에서 데이터만 주고 받을 수 있다*URLConf(URL 설계)
: URL 패턴을 정의하여 해당 URL과 뷰를 매핑하는 단계
path함수를 이용해 URL을 뷰와 매핑할 수 있다
첫 번째 장고 앱 작성하기
docs.djangoproject.com 튜토리얼을 진행하며 작성
진행에는 미니콘다, MySQL, VS Code를 사용했다
튜토리얼 시작 전 가상환경 세팅부터 실시한다
환경 세팅
# 가상환경 생성
conda create -n "가상환경 이름" python="버전"
conda activate "가상환경 이름"
# DB 생성
mysql -u root -p
mysql> create database "NAME" character set utf8mb4 collate utf8mb4_general_ci;
# Django 설치
pip install django
# MySQL server에 접속하기 위한 package 설치
pip install mysqlclient
프로젝트 만들기
cd
명령으로 코드를 저장할 디렉토리로 이동하여 명령을 수행한다
django-admin startproject mysite
mysite/
manage.py : Django 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인의 유틸리티
mysite/ : 디렉토리 내부에는 프로젝트를 위한 실제 Python 패키지들이 저장
__init__.py : Python으로 하여금 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 단순한 빈 파일
settings.py : 현재 Django 프로젝트의 환경 및 구성을 저장
urls.py : 현재 Django project 의 URL 선언을 저장, Django 로 작성된 사이트의 목차라고 할 수 있다
asgi.py : 현재 프로젝트를 제공하기 위한 ASGI 호환 웹 서버의 진입점
wsgi.py : 현재 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점
위와 같이 폴더와 파일들이 생성된다 ( 각각의 역할 확인은 djangoproject.com 공식 문서에 더 자세히 나와있다 )
서버 실행
터미널을 실행해 manage.py
가 위치해 있는 mysite
디렉토리에서 명령어를 통해 서버를 실행시킬 수 있다
python manage.py runserver
http://127.0.0.1:8000/ 를 접속해보면 Congratulations!
을 확인할 수 있다
현재 단계에서 발생하는 에러메시지는 아직 DB와 관련된 설정을 진행하지 않아서 생기는 것이기 때문에 신경쓰지 말자
설문조사 앱 만들기
앱은 manage.py
가 존재하는 디렉토리에서 생성하면 된다
python manage.py startapp "앱 이름"
명령어 입력
python manage.py startapp polls
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
첫 번째 뷰 작성하기
# polls/view.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
위 view.py
를 호출하기 위해선 url이 연결이 되야한다
이를 위해 URLconf
가 사용되고 urls.py
라는 파일을 생성해야 polls
디렉토리에서 URLconf
를 사용할 수 있다
# polls/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
polls/urls.py
를 최상위 URLconf
에서 볼 수 있게 하려면 mysite/urls.py
에서 django.urls.include
를 import
하고, urlpatterns
리스트에서 polls/urls
를 include()
함수를 사용해 추가해주면 된다
# mysite/urls.py
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
]
include() 와 path()
include()
: 다른 URLconf
들을 참조할 수 있도록 도와준다
Django가 함수 include()
를 만나면 전체 URL에서 해당 시점(path()
)까지만 적용하고 뒷부분은 include
된 URLconf
로 전달한다
path()
: 필수 인수(route
와 view
), 선택 인수(kwargs
, name
) 총 4개의 인수가 전달 된다
urlpatterns = [
path('', views.index, name='index'),
]
route
: URL route에서 사용된 경로를 지정하는 것
view
: 해당 URL에 상응하는 view
를 지정하는것
view
를 지정하는 방식 = 함수 뷰의 이름을 지정 or 클래스명.as_view()
kwargs
: 키워드 인수들이 목표한 view
에 사전형으로 전달된다
name
: URL에 이름을 지으면 템플릿을 포함한 Django 어디에서나 명확한 참조 가능
위의 예시에서 view
가 어떻게 사용됐는지 보면 views.index
이므로 polls
앱 views.py
의 index
를 호출하겠다는 의미이다
잘 연결되었는지 확인하려면 서버를 실행하고 http://localhost:8000/polls/를 입력해보자
view.index
에 정의한 Hello, world. You’re at the polls index.
가 잘 보이는 것을 확인할 수 있다
모델 만들기
# polls/models.py
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
각각의 Field
인스턴스의 이름은 DB에서 칼럼명으로 사용된다
또한 위 Choice
클래스의 ForeignKey
를 보았을 때 각각의 Choice
가 하나의 Question
에 관계된다는 것을 알 수 있다 ( 나도, 컴퓨터도 )
모델 활성화
현재 프로젝트에게 polls
앱이 설치되어 있다는 것을 알려줘야 모델을 활성화할 수 있다
# mysite/settings.py
INSTALLED_APPS = [
...,
...,
'polls.apps.PollsConfig',
]
이제 Django는 polls
앱이 포함된 것을 알게 되었다
DB에 테이블을 생성시키기 위해선 makemigrations
와 migrate
를 시켜주면 된다
python manage.py makemigrations polls
#Migrations for 'polls':
# polls/migrations/0001_initial.py
# - Create model Question
# - Create model Choice
python manage.py migrate
MySQL
을 실행시키고 테이블을 조회해보면 모델 활성화가 잘 된 것을 확인해볼 수 있다
Author And Source
이 문제에 관하여([Pre-course] 2021. 10. 13), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gyuls/Pre-course-2021.-10.-13저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)