[로그인과 로그아웃]
질문을 올린 사람, 답변을 올린 사람을 구별하기 위해서는
로그인과 로그아웃 기능이 필수이다.
장고의 로그인, 로그아웃을 도와주는 앱은
django.contrib.auth 이다. 이 앱은 장고 프로젝트 생성시 자동 생성
common 앱
로그인, 로그아웃 => pybo앱?
하나의 웹사이트에는 파이보와 같은 게시판 서비스 외에도 블로그나 쇼핑몰과 같은 굵직한 단위의 앱들이 함께 있을 수 있기 때문에 공통으로 사용되는 기능인 로그인이나 로그아웃을 이 중의 하나의 앱에 종속시키는 것은 좋지 않음
그래서 common 앱에 구현할것
다음처럼 common 앱을 신규로 생성하자
이제 본격적으로 로그인 구현
로그인의 시작은 로그인 화면이다.
로그인 화면으로 진입할수 있도록
templates/navbar.html 에서 로그인 링크 수정하기
[회원가입]
파이보 사용자를 추가할 수 있는 회원가입(계정생성) 기능을 구현해보자.
회원 가입 역시 장고의 django.contrib.auth 앱을 이용하면
쉽게 구현할수 있다.
회원가입을 위한 링크를 다음 처럼 navbar.html 템플릿에 추가
[모델 변경]
게시판의 질문, 답변에는 누가 글을 작성했는지 알려주는 '글쓴이' 항목이 필요하다.
이번에는 Question 과 Answer 모델에 '글쓴이'에 해당하는 author 속성을
추가해보자.
[로그인이 필요한 함수]
request.user가 User 객체가 아닌 AnonymousUser 객체라서 발생한 것
request.user 에는 로그아웃 상태이면 AnonymousUser 객체가, 로그인 상태이면 User 객체가 들어있는데, 앞에서 우리는 author 속성을 정의할 때 User를 이용하도록 했다.
그래서 answer.author = request.user 에서 User 대신 AnonymousUser가 대입되어 오류가 발생한 것이다.
이문제를 해결하려면 request.user를 사용하는 함수에 @login_required 애너테이션을 사용해야 한다.
@login_required 애너테이션이 붙은 함수는 로그인이 필요한 함수를 의미한다.
[disabled]
로그아웃 상태에서는 아예 답변 작성을 못하게 ...