본문 바로가기

Django/따라하는 장고

(43)
26. 앵커 답글을 작성하거나 수정한 후에 항상 페이지 상단으로 스크롤이 이동되어 작성한 답변을 확인하려면 다시 스크롤을 내려서 확인해야 한다. Ajax같은 비동기 통신 기술을 사용할 수 도 있지만 보다 쉬운 방법으로 이 문제를 해결해 보자. HTML 에는 URL 호출시 원하는 위치로 이동시켜 주는 앵커 태그가 있다. 예를 들어 HTML 중간에 라는 앵커 태그가 있다면 이 HTML 을 호출하는 URL 뒤에 #django 라고 붙여주면 해당 페이지가 호출되면서 해당 앵커로 스크롤이 이동된다. 이를 적용해 보자. 먼저 답변에 앵커기능을 추가해 보자. projects\mysite\templates\pybo\question_detail.html 을 수정하자. 답변 작성, 수정시에이동해야할 앵커 태그를 추가했다. 답변이 반복..
25. 추천 기능 먼저 Question 모델에 voter(추천인) 속성을 추가해 보자. 하나의 질문에 여러명이 추천할 수 있고 한명이 여러 개의 질문에 추천할 수 있으므로 다대다, N:N 관계를 의미하는 ManytoManyField 를 사용해야 한다. projects\mysite\pybo\models.py 파일을 다음과 같이 수정하자. voter 를 ManytoManyField 관계로 추가했다. 모델을 변경했기 때문에 makrmigrations, migrate 를 해야한다. 하지만 makemigrations 를 하면 오류가 발생한다. Question 모델에서 사용한 author와 voter 모두 User 모델과 연결되어 있기 때문에 User.question_set 처럼 User 모델을 통해서 Question 데이터에 접근..
24. views.py 분리 점프 투 장고 튜토리얼을 계속 따라하고있는데 계속 하다보면 views.py 에 함수가 계속 늘어나서 불편함을 느끼는데 이를 해결해보자. 이를 해결하기 위해서는 2가지 방법이 있는데 2가지 방법을 다 해보자. 먼저 첫 번째 방법을 한 후에 두 번째 방법을 할 수 있기 때문에 먼저 첫번째 방법부터 따라해보자. [첫 번째 방법] 첫 번째 방법은 views.py 파일만 여러 파일로 분리하고 나머지는 고치지 않아도 되는 변화가 적은 방법이다. 먼저 projects\mysite\pybo\views 디렉토리를 만들자. views.py 파일에 정의된 함수를 기능별로 views 디렉토리에 다음의 파일로 저장하자. 파일명 기능 함수 base_views.py 기본관리 index, detail question_views.py..
23. 답변 수정 및 삭제 [답변 수정] 질문 수정 및 삭제를 만들었으니 답변 수정및 삭제도 만들어줘야 한다. 질문 수정 및 삭제 방법과 유사하게 진행된다. 답변 수정은 답변 등록 템플릿이 따로 없으므로 답변 수정에 사용할 템플릿이 추가로 필요하다. 답변 등록은 질문 상세 화면 아래쪽에 텍스트 입력창을 추가해 만든것 이므로 질문 상세 템플릿은 답변 수정용으로는 적합하지 않다. 먼저 답변수정버튼을 추가하자. projects\mysite\templates\pybo\question_detail.html 을 수정하자. 위에서 {% url 'pybo:answer_modify' answer.id %}가 추가되었기 때문에 pybo/urls.py 에 URL 매핑을추가하면 된다. projects\mysite\pybo\urls.py 에 추가하자. ..
22. 질문 수정 및 삭제 [수정 일시] 먼저 질문 및 답변이 수정된 날짜를 확인할수있는 modify_date 속성을 추가하자. projects\mysite\pybo\models.py 를 수정하자. null=True 는 데이터베이스에서 modify_date 칼럼에서 null을 허용한다는 의미이며, blank=True 는 form.is_valid()를 통한 입력 데이터 검증시 값이 없어도 된다는 의미이다. 즉, 아직 modify_date 값이 없다 = 아직 수정을 하지 않았을 경우 값을 비워둘 수 있다는것을 의미한다. 모델이 변경되었으므로 makemigrations, migrate 명령을 수행하자. [질문 수정] 먼저 질문 수정 버튼을 만들어주자. projects\mysite\templates\pybo\question_detail...
21. author 표시 앞서 추가한 author 속성을 이용해 질문목록 에서 author 를 볼수있게 하자. projects\mysite\templates\pybo\question_list.html 글쓴이로 항목을 추가하고 th 엘리먼트를 가운데 정렬하도록 tr 엘리먼트에 text-center 클래스를 추가하고, 제목의 너비가 전체의 50%가 되도록 style="width:50%" 를 지정했다. {{ question.author.username }} 를 추가해 질문의 글쓴이를 표시했다. 테이블 내용을 가운데 정렬하도록 tr 엘리먼트에 text-center 를 추가하고, 제목을 왼쪽 정하도록 td 엘리먼트에 text-start 클래스를 추가했다. 테이블 항목도 3개에서 글쓴이를 추가해 4개가 되었으므로 colspan 을 4로 수..
20. author 속성 질문, 답변을 달면 누가 글을 작성했는지 알려주는 작성자 항목이 필요하다. Question, Answer 모델에 글쓴이 에 해당되는 author 속성을 추가해야한다. 먼저 질문 모델에 추가하기 위해 projects\mysite\pybo\models.py author 필드는 User 모델을 ForeignKey 로 적용하여 선언했다. User 모델은 django.contrib.auth 앱이 제공하는 사용자 모델로 회원 가입시 데이터 저장에 사용했던 모델이다. on_delete=models.CASCADE 는 계정이 삭제되면 이 계정이 작성한 질문을 모두 삭제하라는 의미이다. 모델을 변경한 후에는 반드시 makemigrations 와 migrate 로 데이터베이스를 변경해 주어야한다. python manage...
19. 회원가입 로그인 기능을 구현했으니 이제 회원가입 기능을 구현해보자. projects\mysite\templates\navbar.html 파일을 다음과 같이 수정하자. 로그인/로그아웃 링크 바로 옆에 회원가입 링크를 추가했다. 회원가입은 로그아웃 상태에서만 보일수있게 했다. {% url 'common:signup' %} 태그를 적어넣었으므로 URL매핑규칙을 추가해줘야 한다. projects\mysite\common\urls.py 에 다음과 같이 추가하자. 회원가입 링크를 누르면 views.signup 함수가 실행된다. 이제 이 함수를 만들어 줘야하지만 그 전에 일단 계정생성시 사용할 UserForm을 projects\mysite\common\forms.py 파일을 추가해 새로작성하자. UserForm 은 djnag..