2021년 28주차 기록
2021.07.12
python javascript billmaker book_cover jupyter_notebook gist pandas
07/12 (월) ~ 07/18 (일)
Python + Javascript 팁 하나
TL;DR
- python , jinja2 템플릿, 템플릿내의 javascript 간에 정보를 주고 받을수 있다.
문제
- BillMaker 개발중에 나온 이슈로 기록해 놓고 싶다.
- lib_scraping 구현중에 대여한 책 dataframe에서 다음과 같은 정보를 pandas로 뽑아내어 기록했다.
- 위 정보는 python에서 뽑아내어 jinja2 템플릿에 전달한 것이므로 일단 html rendering이 완료되면 javascript 처럼 실시간으로 정보가 업데이트 되지 않는다.
- 그런데 위와 같이 구현한 후에 다음과 같이 개선하고 싶어졌다.
- 신규정보인 남은날짜는 정보 특성상 html을 다시 rendering하지 않더라도 html 파일을 열 때마다 업데이트 되어야 하므로 javascript로 구현해야 했다.
구현
-
다음반납
행은 처음 개발한 대로 python + jinja2로만 구현한다. -
다음반납
행은 h2 태그인데 id=’next_return` attr을 주어 javascript로 추후 수정을 용이하도록 한다. - jinja2 템플릿의 제일 마지막에 다음과 같은 script 태그를 추가한다
1 2 3 4 5 6 7 8 9 10
<!-- 다음 반납일과 오늘 사이의 남은 날짜를 계산하여 추가한다--> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment-with-locales.min.js"></script> <script> moment.locale('ko'); var elem = document.getElementById('next_return'); const words = elem.innerHTML.split(' '); const return_day = moment(words[1]); words.splice(2, 0, `(${moment().to(return_day)})`) elem.innerHTML = words.join(' '); </script>
- moment.js 불러오는 행은 다음과 같이 두 줄로 해도 된다. 어느게 좋을지는 확인해보지 않았다
1 2
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/locale/ko.min.js"></script>
- locale을 적용하지 않은 버전도 있고 나라별로 locale을 분리해놓은 것을 보면 로딩할 때 performance 이슈가 있을 것으로 보인다.
- locale을 적용해주면
moment().to()
함수를 써서9일 후
를 나타낼 때 한국 표기를 지원해준다. ( 나라별 날짜 계산도 포함) - String.split(‘ ‘)를 써서 분리하고 Array.splice()를 써서 필요한 문구를 추가하고 Array.join(‘ ‘)으로 문장을 완성한다.
- python 에서 javascript로 데이타를 넘길때 javascript가 인식가능한 html의 한 요소로 넘기면 간단하다. ( 보이지 않는 meta 태그에 json 데이타로 넘겨도 된다)
책 표지 관련 기사
- #book_cover
- 꺼리 : 인터넷서점에 등록된 책 표지 이미지를 도서관목록에 사용할 수 있는가?, 네이버블로그
- 책 표지 이미지가 저작권 이슈로 된 적은 없음.
- 원칙적으로 저작물로 보호를 받긴 하나 주 저작물이라기 보다는 서지정보의 일종으로 평가됨.
- 따라서, 저작권자인 출판사가 보호를 하려고하기 보단 홍보에 쓰길 원함
사이트에 Javascript의 CodePen 처럼 Python 코드 포스팅하기
- #jupyter_notebook, #gist
- Gist를 사용하여 Jupyter Notebook 포스팅하기, DanTheTech
- Python Pandas 팁을 사이트에 올리려고 하는데 참고해보기.
Pandas 예제
- #billmaker, #pandas
문제
- 아래와 같은 Dataframe 이 있을 때 오늘 (2021-07-03) 기준으로…
- 이번달 반납일 [18, 22] 과
- 다음달 반납일 [2, 6] 을 각각 반환하는 함수를 만들고자 한다
index | 서명 | 반납일 |
---|---|---|
0 | 일번책 | 2021-07-18 |
1 | 이번책 | 2021-07-22 |
2 | 삼번책 | 2021-07-22 |
3 | 사번책 | 2021-08-02 |
4 | 오번책 | 2021-08-06 |
- 이 문제는 Python의 Datetime 라이브러리 만으로 풀려고 하면 복잡하다.
- Pandas의 Time Series 예제를 충분히 활용해보자
준비 사항
- 아래와 같이 준비한다
잘못 해결한 사례
- 파이썬과 Pandas를 배운 초기에 짰던 코드
- 다음달을 결정할 때 12월에서 1월로 넘어갈때의 오류등을 없애기 위해
- python의 내장 라이브러리인 datetime과
- 3rd 파티 라이브러리인 dateutil까지 사용하고 있다
- 너무 복잡하다
좀 더 개선된 사례
- Pandas에는 자체적으로 Time Series / date functionality 가 있다
- 웬만한 시간계산 라이브러리 보다 사용하기 좋다
- 좀 더 개선할 점이 있는지 찾아보자.