'점프 투 장고' 2장을 스터디해보자.
2021.08.15 - [Web/Django] - 점프 투 장고 스터디 1장
2장에서는 장고 개발에 필요한 기본 내용을 다루고 있다.
목표
- urls.py 파일을 통해 URL과 매핑되는 뷰 함수 관리
- 장고 ORM을 통해 데이터베이스 제어
- 파이보 게시판 질문 목록과 상세 기능 개발
앱 (App)
프로젝트에 기능을 추가하기 위해서는 앱을 생성해야 한다.
django-admin 명령어를 통해 pybo 앱을 생성해보자.
django-admin startapp pybo
pybo 앱 관련 폴더가 생성됨을 확인할 수 있다.
브라우저에서 http://localhost:8000/pybo 페이지에 요청했을 때, "안녕하세요 pybo에 오신것을 환영합니다." 라는 문자열을 출력하도록 구성해보자.
먼저 config/urls.py 파일에 /pybo URL에 대한 매핑을 추가하도록 하자.
장고의 urls.py 파일은 페이지 요청이 발생하면 가장 먼저 호출되는 파일로 URL과 뷰 함수간의 매핑을 정의한다.
뷰 함수는 views.py 파일에 정의된 함수를 말한다.
config/urls.py 파일 수정
pybo/views.py 파일 수정
아래와 같이 반영됨을 확인할 수 있다.
URL 분리
pybo 앱에 관련된 것을은 pybo 디렉토리 하위에 위치해야 하지만 현 상태로는 config/urls.py에서 파일을 수정해야 한다. config의 urls.py는 앱이 아닌 프로젝트 성격의 파일이므로 이곳에는 프로젝트 성격의 URL 매핑만 추가하는것이 좋다. 따라서 url을 분리하는 과정을 진행해보자.
config/urls.py 파일 수정
pybo/로 시작하는 페이지를 요청하면 pybo/urls.py 파일의 매핑 정보를 읽어서 처리하도록 변경한다.
pybo/urls.py 파일 생성
장고 앱 migrate
서버 구동 시 아래와 같은 문구가 출력됨을 볼 수 있다.
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
admin, auth, contenttypes, sessions 앱들은 장고 프로젝트 생성 시 기본적으로 설치되는 앱으로 이는 config/settings.py파일에서 확인할 수 있다. 따라서 해당 앱들에 대해 migration 작업이 필요하다.
해당 명령어를 수행하면 admin, auth, contenttypes, sessions 앱들이 사용하는 테이블들이 생성된다.
python manage.py migrate
DB에 대한 정보는 'DB Browser for SQLite' 프로그램을 통해 확인할 수 있다.
장고의 장점 중 하나는 테이블 작업을 위해 직접 쿼리문을 수행하지 않아도 된다. 장고의 ORM(Object Relational Mapping)을 통해 쿼리문을 몰라도 데이터 작업을 쉽게 할 수 있다.
모델 작성
질문(Question) 모델에는 다음과 같은 속성이 필요하다.
- subject(제목)
- content(내용)
- create_date(질문 작성 시간)
답변(Answer) 모델에는 다음과 같은 속성이 필요하다.
- question(질문)
- content(답변 내용)
- create_date(답변 작성 시간)
pybo/models.py 파일에 모델을 정의해보자.
파이보 앱 등록
테이블 생성을 위해 config/settings.py 파일에 pybo 앱을 추가하자.
pybo.apps.PyboConfig 클래스는 이미 pybo/apps.py 파일에 자동으로 생성되어 등록되어있다.
모델이 신규로 생성되거나 변경될 경우에는 makemigrations 명령을 수행한 후에 migrate 명령을 수행해야한다.
migrate 명령을 수행하여 테이블을 생성한다.
python manage.py makemigrations
python manage.py migrate
모델 사용하기
장고 셸을 통해 모델 사용법을 익혀보자.
python manage.py shell
Question과 Answer 모델을 장고 셸에서 import 하면 사용할 수 있다.
from pybo.models import Question, Answer
Question 생성, 조회하는 방법은 다음과 같다.
from django.utils import timezone
q = Question(subject='pybo가 무엇인가요?', content='pybo에 대해서 알고 싶습니다.', create_date=timezone.now())
q.save()
q.id # 1 출력
q = Question(subject='장고 모델 질문입니다.', content='id는 자동으로 생성되나요?', create_date=timezone.now())
q.save()
q.id # 2 출력
Question.objects.all() # 모든 Qustion 데이터 조회
Question.objects.filter(id=1)
Question.objects.get(id=1)
Question.objects.filter(subject__contains='장고') # 장고 문자열이 포함된 데이터 조회
Question 수정 및 삭제하는 방법이다.
q = Question.objects.get(id=2)
q.subject = 'Django Model Question'
q.save()
q = Question.objects.get(id=1)
q.delete()
Answer 작성 및 조회하는 방법이다.
q = Question.objects.get(id=2)
from django.utils import timezone
a = Answer(question=q, content='네 자동으로 생성됩니다.', create_date=timezone.now())
a.save()
a.id # 1 출력
a = Answer.objects.get(id=1)
a.question # 답변에 연결된 질문 조회
q.answer_set.all() # 질문을 이용하여 답변을 찾는 방법
'Web' 카테고리의 다른 글
점프 투 장고 스터디 1장 (0) | 2021.08.15 |
---|---|
HTTP Cache (0) | 2020.12.04 |
Augular 개발환경 설정 & 프레임워크 개요 (0) | 2020.06.01 |
Web Home Server (0) | 2019.09.27 |
DNS (Domain Name System) (0) | 2018.10.20 |