Develop/Django

[Django][파이썬 웹 프로그래밍] 05. 실습 예제 확장하기 (2)

dawonny 2021. 8. 4. 23:10
728x90
반응형

이 글은 [파이썬 웹 프로그래밍](저자 김석훈, 출판사 한빛미디어) 교재를 보고 공부하며 정리한 글임.


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

 

https://stackoverflow.com/questions/43287860/dirs-os-path-joinbase-dir-myfolder-templates-nameerror-name-os

 

'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 코딩하기

urls.py

두 줄을 추가해주었다.

임포트문장이랑 / URL을 만들어주었다.

 


5.2.3 View 코딩하기

 

프로젝트랑 관련된 뷰니까 mysite에 있는 view.py에 코딩할거다.

views.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 템플릿을 상속받고 있다.

home.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

 

polls/urls.py


5.3.2 View 코딩

 

 

polls/views.py


5.3.3 Template 코딩하기

 

새로 배운 상속 기능을 추가해보자

코드가 단순해지겠다.

 

base_polls.html

부모 템플릿을 만들고 나머지 html들은 이걸 상속받게 할거다

index.html
detail.html
result.html


5.3.4 로그 추가하기

 

 

로깅시스템이 뭐였더라 한다면... 여길보고 다시 되새기자

https://jinmay.github.io/2018/06/18/django/how-to-log-django/

 

Django(장고) 로깅 기초

장고 로깅현재 운영하고 있는 식단알리미의 사용자들이 어떠한 버튼을 누르는지 분석하기 위해 방법을 찾던 도중 사용자 입력에 대한 로그를 남기는 게 좋을 것 같아서 장고의 로깅하는 법에

jinmay.github.io

settings.py

polls 로거 이름으로 바꾸어 주었다.

views.py 파일에서 __name__ 변수로 로거를 취득하기 위함임.

 

그 다음은 로그를 기록하기 위한 작업으로 polls/views.py 파일에 다음 사항을 추가해주기

polls/views.py

로깅을 위해서 logging 모듈을 임포트 해준다

 

그리고 getLogger(__name__) 메소드를 호출해서 polls.views 로거 객체를 취득.

 

로거 객체의 debug() 메소드를 호출하여 로거에게 DEBUG 수준으로 로그 레코드를 생성하도록 요청.

로거는 ch3\logs\mysite.log 파일에 로그 메세지를 기록한다


결과물

프로젝트 완성~! 

polls 결과 화면 보는 거에서 오류가 뜨길래 오류는 고쳐놓았다.

 

배포하는 법에 대해서 공부를 슬슬 시작해보아야겠다.

728x90
반응형