어제 해봤던 공공데이터 api로 코로나관련 데이터를 찾아봤다.
이를 응용해서 장고프로젝트로 하고있는 웹페이지에 이 코로나 관련 데이터를 뿌리도록 하는것을 해 보았다!
일단은 공공데이터포털에 접속한다.(https://data.go.kr/)
그리고는 아래에 있는 오픈API를 찾는다.
사실 오픈api를 이용하는 부분은 어제 올린 공공데이터api로 코로나 감염자수 확인하기(https://sheriffchae.tistory.com/28) 글과 똑같으므로 딱히 설명할 부분은 없다.
그런고로 장고위주로 포스팅을 하겠습니다 ㅎㅎ
해당기능을 추가하는 순서는
1. 네이게이션바에 해당 탭+링크추가
2. urls.py에 path작성
3. views.py에 함수작성
4. html작성 순으로 했습니다
일단은 네비게이션바에 해당 탭과 링크를 추가하겠습니다.
네비게이션 탭에 COVID-19 현황이라고 추가하고 a태그로 common:covid url을 탐색하도록 설정했습니다.
위와 같이하게 된다면 장고프로젝트안에 urls.py중 app_name 이 common인 urls.py를 탐색하고 이중 path()함수내 name이 coivd인 것을 탐색합니다. 그리고 위와같이 추가하고 웹서버실행 후 접속해보면
네모박스처럼 추가된것을 알 수 있습니다.
(참고로 pybo 프로젝트는 점프 투 장고라는 프로젝트를 카피했고 여기에 몇가지 이것저것 추가하고 있는 개인프로젝트입니다 깃허브주소 : https://github.com/Chaeheebeom/pybo)
어쨋거나 첫번째가 잘되었으니 urls.py파일을 작성해봅시다.
urls.py파일에 보면 app_name이라는 변수가 common으로 되어있습니다. 이 파일에
urlpatterns라는 리스트에 path를 추가해줍니다.
첫번째는 url을 설정하는 것이고, 두번쨰는 views에 어떤 함수를 실행할지 세번쨰는 path함수의 이름이 됩니다.
아까 위 html에서 {% url 'common:coivd' %}로 a 태그링크를 거신것 기억하시죠? 즉 common:covid가 저 path를 탐색하도록 알아서 지정해줍니다.
여기까지 했다면 views파일을 작성해 봅니다.
views.py의 전체 코드입니다. covid라는 함수이름으로 작성해주고 매개변수로 requests를 해주어야 클라이언트단에서 요청하는 데이터를 받을 수 있습니다.
사실 중간에 공공데이터 api로 요청해서 데이터를 정제하는 부분은 크게 다른 부분이 없고 중요한 것은
데이터를 딕셔너리형태로 작성해서 리스트에 넣은 후 다시 클라이언트단으로 response하는 부분입니다.
다시 말씀 하자면 105번쨰 줄에 data= {"createDt":createDt.text,...} 이런식으로 하는게 코로나 관련 데이터를 딕셔너리 타입으로 만드는 거고 이것을 covidList라는 리스트객체에 append해줍니다(108번째줄) 이 후 모든 데이터를 읽었다면
render함수때에 이것을 리턴해 줍니다 (110~112째줄)
여기까지 다 되었다면
마지막으로 coivd.html파일을 작성해줍니다.
html은 간단하죠?
보시다시피 html상속을 하기때문에 따로 헤드나 바디태그를 작성할 필요없이
{% block content %} 와 {% endblock %} 사이에 띄울 데이터만 작성해주면 됩니다.
위 문법은 장고에서 지원하는 jinja2문법으로 작성되었고 jinja에대해 자세히 알고 싶다면 (https://jinja.palletsprojects.com/en/2.11.x/)로 접속하거나 구글에 검색하시면 다양한 예제를 볼 수있습니다.
어쨋든 아까 covildList에서 받아온 데이터를 for문을 통해 화면에 띄워주는 것입니다.
참고로 if나 for문같은 논리식을 사용할떄는 {% %} 사이에 작성하면 되고 단순히 변수에 있는 값을 띄우고 싶다면
{{ }} 사이에 변수이름을 넣어주면 됩니다.
위와 같이 작성하고 실행해보면
이런식으로 결과가 잘 나오게됨을 알 수 있습니다.
따로 bootstarap을 이용하여 디자인을 안했기때문에 필요에 따라 그 부분은 알아서 적용하면 될것 같습니다 ㅎㅎ
-끝-