[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 mysitemysite/
    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 runserverhttp://127.0.0.1:8000/ 를 접속해보면 Congratulations!을 확인할 수 있다
현재 단계에서 발생하는 에러메시지는 아직 DB와 관련된 설정을 진행하지 않아서 생기는 것이기 때문에 신경쓰지 말자
설문조사 앱 만들기
앱은 manage.py가 존재하는 디렉토리에서 생성하면 된다
python manage.py startapp "앱 이름" 명령어 입력
python manage.py startapp pollspolls/
    __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 Choicepython 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.)
                            

