Django - Tutorial

Nina·2020년 10월 1일
0

Django Tutorial

목록 보기
2/2
post-thumbnail

1. Django is a Framework(프레임워크란?)

(1) Library vs Framework

라이브러리와 프레임워크는 반복적인 작업을 최소화하여 코딩을 더욱 효율적으로 할 수 있도록 다른 사람이 쓴 코드를 가져다 쓰는 것이라는데에 공통점이 있다. 하지만 라이브러리는 '내가 코드를 컨트롤'하기 때문에 필요할 때마다 가져다 쓰면 되는 반면, 프레임워크를 사용할 때에는 '정해진 규칙을 따라서 작성'한 뒤 프레임워크가 코드를 실행한다는 점이 다르다(비유를 하자면 심즈를 할 때 내가 집을 직접 지으면서 필요한 cc템 가져다 쓰는건 라이브러리, 아예 다 만들어진 집 cc템을 다운받는건 프레임워크의 콘셉트와 유사한.. 느낌?)

(2) Django is a Framework!

장고는 파이썬 프레임워크로, 파이썬을 이용해서 동적인 웹사이트를 만들 수 있게 도와준다. 장고는 프레임워크이기 때문에 그 규칙에 따라서 작성해야한다. 모델, 뷰, 템플릿을 정확한 파일에 작성해야 제대로 동작한다.

2. Django Tutorial

장고 공식문서에서는 실제로 장고를 이용해 앱을 만들면서 장고를 익힐 수 있는 튜토리얼을 제공한다(링크).

(1) Part 1

🐍 Create Project & App

django-admin startproject mysite

장고를 설치한 후, 원하는 디렉토리에 mysite라는 프로젝트를 만든다.

python manage.py startapp polls

생성된 mystie 디렉토리 안에 polls라는 앱을 만든다.
프로젝트 디렉토리 구조는 다음과 같다.

프로젝트 이름(mysite)과 같은 이름을 가진 하위폴더는 프로젝트의 기본적인 설정을 담고있다.
프로젝트 안에는 다양한 앱이 존재할 수 있으며, 다른 프로젝트에서 만든 앱을 가져다가 사용하는 것도 가능하다. 예를 들어 한 사이트 내에 게시판 기능과 투표 기능이 필요하다면, 각각의 기능별로 앱을 만들어서 관리한다.

python manage.py runserver

프로젝트를 만든 후 manage.py가 있는 mysite 디렉토리에서 위 명령어를 실행한 후, 주소창에 'http://127.0.0.1:8000/' 를 입력하면 다음과 같이 장고 서버에 접속할 수 있다(127.0.0.1은 자신의 컴퓨터를 말하며, 따라서 'localhost:8000/'을 입력해도 똑같이 실행된다).

🐍 화면에 'Hello World' 띄우기

polls 디렉토리 안의 views.py에 다음과 같이 작성한다.

페이지 요청(request)에 대해 'Hello, world!'라고 대답(HttpResponse)하는 코드인 index함수를 작성하였다. 이 함수가 실행되기 위해서는 어떤 url 요청에 대해 실행되는지 지정해주어야 한다. index 함수는 polls 앱 내부에 존재하므로, 사이트에 접속했을 때 polls앱이 실행되는 조건과, polls앱이 실행된 후 어떤 경우에 index 함수가 실행되는지를 지정한다.

먼저 polls앱이 실행되는 조건을 설정한다.

프로젝트 폴더 내의 mysite폴더의 urls.py에 작성한다.

§20 path(접속한 주소, 처리 주체)

include는 앱에 접속했을 때 반드시 작성해주어야한다(이유).

다음 polls 디렉토리 안에 urls.py 파일을 만들어 index 함수가 실행되는 조건을 설정한다.

§2 현재 폴더에서 views라는 모듈을 임포트해라
§5 빈 경로에 접속했을 때 views.index를 실행해라.


polls/(빈 경로)에 접속했을 때 'Hello, world!'가 나타난다.

(2) Part 2

🐍 Creating Models

투표를 할 수 있는 polls 앱이기 때문에 질문 및 투표 정보를 담을 수 있는 클래스를 생성해야 하는데, 이를 장고에서는 model이라고 한다.
polls디렉토리 내의 models.py에 다음과 같이 작성한다.

§4 클래스가 모델로 동작하기 위해서는 model.Model을 상속받아야한다.
§5 필드명 = models.이건문자필드야(최대길이=200)
§6 필드명 = models.이건날짜시간필드야(사람이 알아보기 위한 필드명(optional))
§9 이 필드는 Question의 fk이다.
§11 필드명 = models.이건정수필드야(디폴트값은0)

🐍 Migration & DB

장고는 종료되면 갖고있던 데이터가 모두 지워진다. 그래서 지워지면 안되는 정보는 db에 별도로 저장해서, 장고 서버가 꺼지더라도 데이터를 다시 불러와서 웹사이트를 운영할 수 있도록 한다.
먼저 프로젝트 폴더 내 mysite 디렉토리의 settings.py에서 INSATLLED_APPS에 polls 앱을 추가한다.

프로젝트 폴더에서 python manage.py makemigrations를 실행하면 polls의 migrations 폴더에 새로운 파일이 생성되고, 다음과 같이 db에 저장될 내용들이 정리된 것을 볼 수 있다.

이 작업만으로 db가 변경되지는 않는다. 다시 프로젝트 폴더에서 python manage.py migrate를 실행하면 db에 데이터가 저장될 공간이 만들어진다.

🐍 Django Admin

장고 어드민을 이용하면 DB에 쉽게 값을 넣을 수 있다.

python manage.py createsuperuser

계정을 생성하고 localhost:8000/admin에 접속하여 로그인한다.

(아직 아무것도 없다)

polls앱 폴더 안의 admin.py에 다음과 같이 작성한다.

그러면 어드민 페이지에 이렇게 생성된다.


이런 방식으로 데이터들을 추가할 수 있다. 여기서 수정하고 싶은 두 가지의 문제가 발생한다.
➀ 날짜가 우리나라 시간이 아니고
➁ save했을 때 제목이 'Question object(1)'으로 임의 지정된다.
시차 문제를 해결하기 위해 mysite/settings.py에서 time_zone을 'UTC'에서 ' Asia/Seoul'로 변경한다. 그 다음 제목을 설정하기 위해 __str__ 메소드를 추가한다.


쨔쟌⭐

🐍 Python Shell

장고 어드민에서 데이터를 추가하고 확인할 수 있지만, python shell을 이용할 수도 있다.

profile
https://dev.to/ninahwang

0개의 댓글