일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 인터페이스
- 확률분포
- 깊이 우선 탐색
- 분할정복
- Solid
- BFS
- 객체 지향 설계
- Probability Distribution Function
- divide and conquer
- 너비 우선 탐색
- 확률변수
- 표본 추출
- 기술 통계
- Random variable
- PostgreSQL
- 확률
- 다형성
- 재설치
- dag
- 추론 통계
- 확률분포함수
- 베이지안
- 알고리즘
- spring boot
- 스프링
- 이분탐색
- Algorithm
- dfs
- 오일러 경로
- 이진탐색
- Today
- Total
말하는 감자
Community 시스템 설계 하기 본문
Community 시스템 설계 하기
이어서 각 논문마다 댓글창을 구현하는 과정을 보이려고 한다. 사용자가 논문을 검색하면, 그 논문에 대한 질문을 주고 받을 수 있는 커뮤티니 창을 만드는 것이 목표다. 그러나, Pubmed에 존재하는 논문의 개수는 몇십만개가 넘고, 각 논문마다 일일이 모델 오브젝트를 만들어서 댓글창을 구현할 수도 없는 노릇이다. 그래서, 생각해낸 방법은 어차피 모든 논문에 사람들이 댓글을 달 거 같지는 않고, 사용자가 질문을 initiate할 때에만 오브젝트를 생성하는 것이 database storage에도 효율적이고 구현도 가능해 보이기 때문에, 그 방법을 설명할 것이다.
일단 사용자가 질문을 만들고 싶을 때 채울 수 있는 Post 모델을 먼저 설계한다. 질문의 제목에 해당하는 title, 자신의 아이디가 들어갈 author, 어떤 논문에 대해서 질문을 생성된 것인지 보이는 base_title, 그 논문의 고유 식별 아이디인(pubmed 사이트에서 제공한다) base_id, 그리고 질문 내용인 body, 글을 작성한 시간인 publish. 이때 author는 장고에서 자체적으로 제공하는 User 모델을 참조한다. (이 User모델로 회원가입, 로그인, 로그아웃을 간단하게 구현할 수 있다.) 이렇게 6가지 attribute를 가지는 모델을 생성하고, migrate 해준다.
또한, 사용자가 만든 질문에 다른 사용자들도 댓글을 달 수 있도록 Comment 모델을 설계한다. 올라온 글의 아이디를 참조하는 외래키 post, 댓글을 작성하는 본인 아이디 name (마찬가지로 장고에서 제공하는 User모델을 참조한다), 댓글의 내용 body, 그리고 생성된 날짜 date_added 들의 attribute를 가진다.
그 다음으로 template, url, view 이 세가지를 적절하게 작성하여 사용자가 질문 추가하는 동작을 할 수 있도록 하면 된다. 다만 이 경우 어떤 논문위에 기반하여 작성했는지 알아야 하기 때문에 논문을 검색한 결과를 크롤링한 이후부터 base_id를 함수간에 놓치지 않고 계속 전해 주어야 한다.template에서 받아올 때에는 form 안에서 즉, hidden타입으로 보내주면 된다.
//template
<form action="//views.py 안의 실행할 함수 이름">
<input type="hidden" name="theid" value="{{pmcID}}"/>
</form>
//view.py의 함수
...
data = request.GET['theid']
이 외에도 글을 작성, 수정, 삭제, 댓글을 작성, 수정, 삭제 기능이 있지만 그 부분은 반복되므로 생략하겠다. 다른 사용자들이 작성한 글을 불러와 논문의 id로 필터링하여 보여주게 하면, 해당논문에 대하여 올라온 글들을 모두 볼 수 있다.
'Backend > django project' 카테고리의 다른 글
AWS 홈페이지 배포하기 (0) | 2020.11.17 |
---|---|
메모장과 북마크 팝업창으로 구현하기 (0) | 2020.11.17 |
Template에 List 여러개 번갈아 띄우기 (0) | 2020.11.17 |