Django 입문하기
210723
Last updated
Was this helpful?
210723
Last updated
Was this helpful?
MTV 패턴
Model, Template, View
model : models.py에 구현되어 있다. 페이지가 무엇을 담아야 하는지 정의한다. 제목, 내용, 작성자, 작성일 등이 담겨있다.
template : index.html에 구현되어 있다.
view : urls.py에 구현되어 있다.
데이터 구조, 모양, 로직을 분리하여 개발하는 방법
흐름은 client -> ulrs.py -> views.py -> models.py -> DB -> models.py -> views.py -> index.html -> client
지금 당장 이 흐름을 몰라도 된다. 앞으로 반복을 통해서 장고의 흐름을 점점 이해할 것임
대문 페이지
블로그 페이지
자기소개 페이지
새로 저장소를 생성한다.
Add .gitignore 에 Python을 추가하게 되면 .py 파일에 대해서는 버전관리를 하지 않는다.
그리고 프로젝트를 파이참으로 열고 가상환경을 설정한다.
.gitignore에는 버전관리를 하지 않을 파이썬 파일들 유형이 적혀있다. 여기에 .idea/를 추가한다.
.idea는 파이참에서 프로젝트를 위해 관리하는 파일이다.
이 프로젝트는 가상환경에서 작동하게 되는데 CMDer에서 python을 입력하면 이는 로컬환경에서 작동하는 Python이다.
만약, 가상환경에서 작동되는 Python을 실행하려면 가상환경 설정이 된 프로젝트에서 .\venv\Scripts\activate.bat
을 실행하면 된다. 탈출은 deactivate
를 입력하면 된다. 가상환경에서 작동되면 입력창 앞에 (venv)
가 명시된다.
pip list
는 현재 설치된 파이썬 라이브러리를 보여준다. 가상환경에서는 pip
와 setuptools
만 존재한다.
pip install django
로 장고를 설치할 수 있다.
django-admin startproject doitdjango_prj .
장고프로젝트를 생성하는 명령어. startproject 뒤에는 프로젝트 이름이 오며 .
을 찍어서 현재 경로에 만들도록 한다.
python manage.py runserver
파이썬 서버를 작동시킨다.
이 때 127.0.0.1/8000 에 접속하면 다음과 같은 화면을 볼 수 있다.
이 때, 터미널에는 다음과 같은 경고 메시지가 뜬다.
18개의 적용되지 않은 마이그레이션이 있다는 이야기.
마이그레이션은 아이템(테이블)을 데이터베이스에 적용하는 것이다.
DB에 저장되는 정보라고 생각하면 된다.
기본적으로 프로젝트를 생성하면서 생기는 마이그레이션이 있다.
python manage.py migrate
마이그레이션 하겠다는 명령어
이 명령어를 실행하면 데이터베이스가 생긴다. 기본적으로 SQLITE3가 생긴다.
이 파일들도 역시 git에 푸쉬할 정보들이 아니기 때문에 .gitignore에 추가하는게 좋다
두 개의 파일이 기본적으로 추가되어 있다
db.splite3
db.sqlite3-journal
: 임시 파일
python manage.py createsuperuser
관리자 계정을 만드는 명령어
눈치챘겠지만 대부분 장고에 관련된 일을 할 때는 managa.py
를 입력한다.
이후 서버를 작동시키고 기존 주소 127.0.0.1/8000에 /admin을 추가한 127.0.0.1/8000/admin 에 접속하면 다음과 같은 로그인 페이지를 볼 수 있다.
좀전에 만든 관리자 계정으로 접속하면 볼 수 있는 관리자 페이지
장고에서 App은 안드로이드의 App과는 다르다. 장고의 App은 하나의 기능을 갖는 단위이다.
python manage.py startapp blog
app을 만드는 명령어
각 앱마다 다음처럼 고유 파일들을 가진다.
이 때 앱을 생성하게 되면, 프로젝트 파일의 settings.py
에서 생성된 app을 연결해줘야 한다.
이 부분은 다시 다룸.
엑셀에 한 시트를 테이블이라고 하는데 장고에서는 이 테이블을 모델로 구현한다.
테이블내에 하나하나의 데이터(행)를 레코드라고 한다.
장고에서 제공하는 기능이 models.Model
에 다 있기 때문에 이 클래스를 상속 받는다.
짧은 텍스트의 경우는 CharField
를 긴 텍스트의 경우는 TextField
를 사용하며 max_length
인자로 글자 수를 제한할 수 있다.
이 후 python manage.py makemigrations
를 입력하면 장고가 알아서 코드의 변화를 인지하고 수정사항을 마이그레이션으로 간주한다. 이 때 명령어를 입력하면 아무 변화가 없다고 뜬다. 왜 그럴까?
이는 좀전에 다시 다루겠다고 한 부분과 이어지는 부분!
프로젝트 폴더의 settings.py
에 새로 생성한 app을 연결해주지 않았기 때문이다. 위처럼 연결을 해주고 나야 다음과 같이 migrations이 반영되었다고 뜬다.
다만 이는, 장고에게 마이그레이션이 있다는 것을 알려주기만 한 상태이다. 데이터베이스에 적용한 것은 아니다. 따라서! 데이터베이스에 적용하기 위한 명령어도 작성해야 한다.
python manage.py migrate
db.sqlite에 반영이 되었다.
그리고 이 때 이 반영된 migration이 폴더에 생성되게 되는데 이 역시 git이 관리하지 않도록 ignore에 추가해야한다.
migrations 폴더는 ignore의 default로 존재하지 않기 때문에 유저가 직접 추가해야한다!
admin.py
model.py
에서 정의한 db 내용을 볼 수 있는 Post 게시판을 만든다. 여기서 새로운 포스트를 작성할 수 있다.
이 때 작성한 포스팅들을 구별할 수 없다.
다음과 같은 매직 함수를 추가하면 구별할 수 있게된다.
이 때 pk는 primary key 를 의미한다.
그리고, 장고는 기본 시간이 영국 시간으로 되어 있기 때문에 settings.py
에서 TIME-ZONE
을 'UTC' 에서 'Asia/Seoul' 로 바꾸어 주면 된다. 그리고 USE-TZ
를 'False' 로 변경한다. USE-TZ
는 타임존을 사용할지에 대한 여부이다. 이렇게 하면 한국시간으로 설정할 수 있다.
여기서는 시간을 사용자가 수동으로 설정해야 한다. 기본적으로 작성되는 시간으로 설정하기 위해 코드를 수정한다.
auto_now_add
는 새로 추가되었을 때 현재시간으로 설정하라는 것
auto_now
는 갱신되 때 현재시간으로 설정하라는 것
기존에 설정할 수 있던 시간이 사라진 모습
python manage.py shell
을 입력하면 장고에서 지원하는 대화형 쉘을 사용할 수 있다. 이후 쉘에 쿼리문을 입력해서 DB의 내용을 얻을 수 있다.
Post.objects
all()
: 객체의 모든것을 할당
last()
: 객체의 가장 마지막으로 속한 부분을 할당
first()
: 객체의 가장 처음으로 속한 부분을 할당
할당된 데이터를 변수에 저장할 수 있고, models.py
에서 정의한 column들을 변수.속성
으로 사용할 수 있다.