PyCharm과 함께 DJango와 RestFramework를 활용하여 간단한 게시판 만들기(2)
이번 시간에는 지난 시간에 예고한 대로, 몇 가지 다른 주제를 통하여 게시판 프로젝트를 조금 더 진척 시켜 보려고 합니다. 오늘 진행할 주제는 아래와 같습니다.
– Pagination 을 통하여 Pagin 손 쉽게 하기
– Template 안에서 Logic 만들기
게시물 보이기
가장 먼저 진행할 사항은, 다름 아닌 게시물 보이기! 게시판 형태로 게시물들을 정리하고 이를 표현하는 방법을 먼저 진행할 겁니다. 모델링을 하긴 했지만, 이를 웹 페이지로는 표현하지 않았으니까요. 그럼, 바로 시작해 볼까요?
경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다. https://s1004games.com
지난 포스팅에 이어서, post_list.html 파일을 먼저 수정해 봅시다.Django template language 문법을 이용하여, 간단하게 post_list 를 순회해서 출력하도록 해 봅시다. post_list 는 view 에서 데이터를 셋팅하게 될 것이고, 여기서는 이 데이터를 출력만 하게 될 겁니다. template language의 경우, 제어문은 {% %} 로 묶여서 쓰여지게 됩니다.테이블 구조를 만들 것이니, 간단하게 테이블 구조를 만들어 줍시다.제목과 작성자를 헤더에 넣어주고…내용을 넣어 줍니다. template language 에서 변수에 접근하는 방법은 {{ }} 로 감싸서 쓰게 됩니다. PHP나 ASP, JSP 등과 유사한 문법으로 사용하시면 됩니다.넘어가는 데이터는 지난번에 만들어둔 Post 객체가 넘어갈 겁니다. 따라서 여기에 있는 필드 들을 사용하게 될 겁니다.이제 view를 살짝 고쳐 봅시다.post_list 에 Post 모델의 전체 데이터를 넘겨 봅시다.간단하게 코드도 정리하고….서버를 켜 봅시다.제목과 작성자는 테이블 헤더로 잘 나오고 있는데… 아무런 데이터가 없네요?? 왜 그런지 한번 살펴 볼까요?PyCharm Professional Edition 에서는 템플릿 디버깅도 허용합니다. 저희가 원하는 위치에 Break point를 찍고….웹 페이지를 새로고침 해봅니다. post_list 가 빈 리스트 ([]) 로 나오네요? 그러고 보니, 저희는 데이터를 넣은 적이 없네요…. 데이터를 넣으러 가 볼까요?Django 1.7 부터 기본으로 설치되는 admin 페이지에 접근해 봅시다. 서버 주소에 /admin 으로 접속하면, 로그인 화면을 만날 수 있습니다.……하지만 ID와 비번이 없네요… admin / admin 인줄 알았더니…!!manage.py 를 통해서 createsuperuser 라는 명령을 내려, 슈퍼 유저를 한명 만듭시다.간단하게 ID와 비밀번호를 설정 합시다. 화면에는 가렸지만, Password 는 화면에 출력됩니다!그리고 로그인을 했더니… 짜잔!! 뭔가 저희가 필요한 정보가 100% 다 있지는 않은거 같습니다. Post 데이터를 등록하고 관리해야 하니까… 조금, 설정을 더 건드려 볼까요?간단하게 각 App 마다 있는 admin.py 파일에 Admin 페이지 관련 정보들을 기입해 둡니다. 일단 여기서는 Post 모델을 등록하면 되니까, Post를 등록하도록 하죠.그리고 다시 접속 했더니, Post 가 뙇!Post 관리에 들어가 보면, 아무런 데이터가 없는 것을 볼 수 있습니다. Add post 버튼을 눌러서 데이터를 몇 개 넣어 볼까요?Add post 화면 입니다. 저희가 설정해둔 Model 데이터들이 여기 나오네요. Author 의 경우, ForignKey로 User에 연결이 되어 있다 보니 User에 있는 사용자(현재는 admin)만 표시 됩니다. + 버튼을 눌러 사용자부터 추가해 볼까요?이렇게 새 사용자 팝업 창이 뜹니다. 간단한 데이터만 입력해도 되니까….정말 테스틱 한 ID와 비밀번호로 만들어 보겠습니다.이제 test1 사용자가 생성되어서 Author 에서 선택할 수 있게 되었습니다. 나머지 내용을 채워 볼까요?정직한 제목, 정직한 내용을 적어 봅니다.그리고 board 페이지를 새로 고쳐 보면… 뙇!그렇게 정직하게 7개를 더 넣어봤습니다.그리고 확인해 보니 넣어진 데이터들도 모두 잘 나오네요.이제는 페이지 기능을 위해 Paginator 를 사용해 보도록 합시다. 먼저 django.core.paginator 에 포함된 Paginator 클래스를 임포트 하고,Django 튜토리얼에도 나오는 방법대로 코드를 작성해 봅니다. GET 파라메터로 page가 온다고 가정하고 데이터들을 건드려 봤습니다.Paginator 를 통해, 데이터 5개 단위로 자르게 했더니 5개만 잘 나오네요.GET 파라메터로 page 값을 넘겨도 보니, 잘 넘어 가지는 것 같네요.page=1 파라메터도 잘 작동하구요.그리고 좀 더 디테일한 정보를 위해, 현재 페이지 / 총 페이지 수 등을 더 넘겨 봅시다.그리고 넘어오는 데이터에 맞게 템플릿의 내용도 조금 수정할께요.아차, 넘기기 전에 템플릿 에서는 바로 활용을 할 수 있도록 view 단에서 넘어갈 데이터를 잘 다듬어 줍시다. for 문을 위해 range로 리스트를 만들어서 넘기도록 하고,0 부터 시작하니 1 ~ n + 1 까지 range 가 되도록 수정해 줍시다.넘어갈 page도 for 문에서 같은 이름을 쓰니까, 여기서 current_page로 바꿔서 넘겨주고…템플릿 if 문에서 사용해도 문제가 없도록 int 를 붙여서 넘기도록 합시다.마지막으로, 템플릿을 좀 더 수정하여 current_page와 page가 같지 않을 시에 a 태그를 통해서 ?page= 를 붙이도록 하고 / current_page와 page가 같으면 bold 스타일을 추가하도록 코드를 수정 합니다.그렇게 했더니 이렇게!!! 뙇!!
마치며…
사실, 오늘 포스팅은 조금 급하게 적어서… 내용에 두서가 없는 거 같기도 하네요. 굉장히 축약 되어 버렸는데…. 차근차근 따라하셔도 아마 대략적인 내용을 알 수 있을 겁니다. 이번 시간에 하려고 했지만, 못했던 내용들은 다음 포스팅 때 알아 보도록 하겠습니다. 아래는 다음 포스팅 때 진행 하고자 하는 내용들 입니다
– 사용자 권한 부여하기
– 글쓰기 기능 구현 및 POST 기능 구현하기
– 게시판에 REST Api 만들어 붙이기
본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.