[Django][파이썬 웹 프로그래밍] 05. 실습 예제 확장하기 (2)
이 글은 [파이썬 웹 프로그래밍](저자 김석훈, 출판사 한빛미디어) 교재를 보고 공부하며 정리한 글임.
5.1.8 지금까지 작업 확인하기
클래스형 제네릭뷰로 books 애플리케이션을 코딩했었다.
템플릿 상속에 대해서 다시 제대로 짚고 넘어가자면 base.html 이 기본 뼈대를 만드는 역할을 하고
이 부모 템플릿에 나타난 block 부분들을
자식 템플릿이 덮어쓰는 것이다.(치환)
->이렇게 이해하니 이해가 잘된다. 아래 문서를 참고해서 이해했다.
https://django-doc-test-kor.readthedocs.io/en/old_master/topics/templates.html
Django 템플릿 언어 — Django 1.4 documentation
Django의 템플릿 언어는 강력함과 용이성 사이의 균형을 잡고자 설계되었습니다. HTML 작업을 하는 동안 편안함을 느낄 수 있도록 합니다. Smarty나 CheetahTemplate등의 텍스트 기반 템플릿 언어를 접해
django-doc-test-kor.readthedocs.io
이제 확인해보기 위해 데이터를 입력하려고 한다.
runserver 하고 admin 사이트에 가보자
근데 runserver 명령어가 안된다. 오류가 났다.
'DIRS': [os.path.join(BASE_DIR, 'templates')],
NameError: name 'os' is not defined
'DIRS': [os.path.join(BASE_DIR, 'myfolder', 'templates'),], NameError: name 'os' is not defined - Django
I have installed python3, pip3 and created virtualenv for my project and then installed django. I have installed needed packages and when I am trying to run this command in terminal ./manage.py sy...
stackoverflow.com
찾아봤는데 import os 를 해줘야 한다고 한다.
다시 runserver 실행!
레코드를 입력해봐야겠다
책 3권을 입력해줬다. (저자랑 출판사도 모두 입력함)
books 애플리케이션으로 접속해보자
근데 Project_Home 부분은 코딩을 아직 안해서 에러가 뜬다.
이부분을 코딩해야한다.
5.2 프로젝트 첫 페이지 만들기
저번에 만들어 놓았던 polls 애플리케이션과 이번에 만든 books 애플리케이션은 만들어져 있는거다.
/polls/ 과 /books/ 라는 URL은 있는데 이 둘을 보여주는
제일 첫번째 페이지인 / 가 없는 상태이다.
그러니 첫 페이지인 / 에 대한 URL 처리 로직을 코딩하려고 한다.
5.2.1 프로젝트 첫 페이지 설계
첫페이지는 home.html 이 될거고
여기서 polls 를 클릭하면 polls/index.html 을 보여주고
boks 를 클릭하면 books/index.html 을 보여주게 할거다.
뷰 흐름을 설계하자면
/ ---> HomeView.as_view() ---> home.html
이다.
5.2.2 URLconf 코딩하기
두 줄을 추가해주었다.
임포트문장이랑 / URL을 만들어주었다.
5.2.3 View 코딩하기
프로젝트랑 관련된 뷰니까 mysite에 있는 view.py에 코딩할거다.
TemplateView 일때에는 template_name 을 필수로 써줘야하고 (오버라이딩)
템플릿으로 넘겨줄게 있으면 get_context_data() 메소드를 써주면 된다(오버라이딩)
get_context_data() 쓸때에는 super() 이걸 꼭 첫줄에 써줘야 한다.
여기서는 app_list라는 변수에다가 리스트 형식으로 담아서 넘겨주고 있다.
return 문장도 필수!
그리고 이 프로젝트의 첫화면은 home.html 이 되는데 이 템플릿은 설정파일에다가 위치를 써주었다.
5.2.4 Template 코딩하기
home.html 을 만들어 볼거다.
프로젝트 템플릿이니까 templates 에 만들어 주면 된다.
이 home.html 은 base.html 템플릿을 상속받고 있다.
아까 뷰에서 app_list 를 넘겨받은것을 여기서 쓰고 있다.
appname 을 for 문으로 순회하면서 화면에 보여주도록 하고있고
appname을 클릭하면 접속할 URL을 추출하기 위해서 {% url urlvar %} 태그를 사용하고 있다.
만약에 books라는 appname을 클릭하면 urlvar는 books:index 가 될거다.
5.2.5 지금까지의 작업 확인하기
다시 runserver 하고 웹페이지를 확인해보자
첫 페이지인 Project_Home 이 성공적으로 나타났다.
5.2.6 apps.py 활용 맛보기
프로젝트의 전반적인 항복들을 설정하는 곳 -> settings.py
각 앱마다 필요한 항목을 설정하는 곳 -> apps.py
장고를 입문하는 사람은 apps.py를 활용하는 경우는 많지 않다고 한다.
지금은 넘어가고 필요할 때 다시 돌아와서 공부해야겠다
5.3 이전에 작성했던 polls 애플리케이션 - 클래스형 뷰로 변경하기
테이블은 변경사항이 없으니 URLconf 코딩부터 하자
5.3.1 URLconf
5.3.2 View 코딩
5.3.3 Template 코딩하기
새로 배운 상속 기능을 추가해보자
코드가 단순해지겠다.
부모 템플릿을 만들고 나머지 html들은 이걸 상속받게 할거다
5.3.4 로그 추가하기
로깅시스템이 뭐였더라 한다면... 여길보고 다시 되새기자
https://jinmay.github.io/2018/06/18/django/how-to-log-django/
Django(장고) 로깅 기초
장고 로깅현재 운영하고 있는 식단알리미의 사용자들이 어떠한 버튼을 누르는지 분석하기 위해 방법을 찾던 도중 사용자 입력에 대한 로그를 남기는 게 좋을 것 같아서 장고의 로깅하는 법에
jinmay.github.io
polls 로거 이름으로 바꾸어 주었다.
views.py 파일에서 __name__ 변수로 로거를 취득하기 위함임.
그 다음은 로그를 기록하기 위한 작업으로 polls/views.py 파일에 다음 사항을 추가해주기
로깅을 위해서 logging 모듈을 임포트 해준다
그리고 getLogger(__name__) 메소드를 호출해서 polls.views 로거 객체를 취득.
로거 객체의 debug() 메소드를 호출하여 로거에게 DEBUG 수준으로 로그 레코드를 생성하도록 요청.
로거는 ch3\logs\mysite.log 파일에 로그 메세지를 기록한다
프로젝트 완성~!
polls 결과 화면 보는 거에서 오류가 뜨길래 오류는 고쳐놓았다.
배포하는 법에 대해서 공부를 슬슬 시작해보아야겠다.