* 추가할 기능 구현 (게시판)

- 댓글 수정기능 -> 댓글 삭제 기능

- 조회수 조작 방지 기능

- 게시글 삭제 기능


* 추가할 기능 구현 (인증)

- 소셜 인증


==========================================


  댓글 수정말고 댓글 삭제 기능을 넣었다. 댓글 같은 경우 수정할 바에 차라리 지우고 다시 쓰도록 의도하였다.


  먼저 작업 들어가기전에 갑자기 아이디어가 떠올라 개선한 점이 있다. 바로 리다이렉트부분이다. 기존 같은 경우 게시글을 수정하거나, 게시글에서 댓글을 작성한 후에 게시글 리스트로 리다이렉트 된다. reverse를 써서 제자리에 오도록 하려했으나 (F5기능) circular import 문제 때문에 구현하지 못했었다.


  그런데 그냥 템플릿에 넘겨주면 되지 않나? 라는 생각이 들어 이 부분을 해결하였다.


< render로 변경 >


  템플릿을 지정해주고 context 안에 post를 담아서 보내주었다.



< 개선된 게시글 >


  이제 이 자리에서 바로 글을 수정해도 이 페이지며, 댓글을 달아도 이 페이지로 남는다.


  그런데 이상한 점을 추가적으로 포착했다. 바로 개행이 안된다는 점이다. 위 사진을 보면 분명 내가 Update 마다 줄을 바꿔줘서 넣었는데 개행처리가 안됬다.


  이 점에 대해 검색을 해보니 HTML에서 개행을 처리 안해서 그렇다고 한다. 개행을 <br> 로 바꿔주면 된다. 여기서 linebreaksbr 을 사용하면 <br>로 바뀐다고 한다.



< linebreaksbr >


  확인해보면 다음과 같다.


< 개행처리 되는 모습 >



  이제 본격적으로 구현하고자 하는 기능 구현이다. 먼저 게시글 삭제 기능이다. 이 기능은 직접 구현하지 않고 CBV를 이용하여 구현하였다. 다만 함부로 삭제되면 안되므로 현재 로그인된 사용자가 게시글을 작성한 사람과 같은지 검증하기 위해 filter를 이용하여 검색된 쿼리만 삭제하도록 구현하였다.


< PostDeleteView >


  테스트해본다.!


< 삭제 테스트 >



< 삭제 확인 팝업 >


  정말 삭제할 것인지 물어본다.


  그 후 정말 삭제할 것인지 다시 한번 물어보는데 이는 DeleteView에 있는 기본 기능에서 템플릿만 만들어서 이어주었다.


< 재재확인 >



< 삭제된 글 >


  글이 정상적으로 삭제 되는 것을 확인하였다.



  다음으로 댓글 삭제이다. 댓글 삭제도 CBV를 이용하고 싶었으나, pk 종류가 두개가 들어오는데 이를 처리하는 부분에서 계속 에러가 나서 직접 view를 작성하였다.



< comment_delete view >


  post와 comment 둘 다 얻는다. 그 이유는 comment는 삭제하기 위한 것이고, post는 다시 원래 있던 페이지로 돌아가기 위해서이다.



< 댓글 삭제 테스트 >


  맨 위의 댓글을 지워보았다.



< 댓글 삭제 확인 >



  댓글이 정상적으로 삭제되었다. 




* 추가할 기능 구현 (게시판)

- 조회수 조작 방지 기능



* 추가할 기능 구현 (인증)

- 소셜 인증



  지난 글에서 auth APP을 이용하여 로그인/로그아웃 기능을 구현하였다. 이번에는 회원가입 기능을 추가해 볼 것이다. 이를 위해 accounts APP을 만들어준다.



< accounts APP 생성 >


  이제 이 APP에 auth APP의 기능을 이용해 회원 가입 기능을 추가할 것이다. settings.py 를 수정해준다.


< settings.py 수정 >


  accounts APP을 생성한 후 settings.py 파일에서 임포트 APP 리스트에 추가해준다.



< urls.py 수정 >


  urls.py에 생성한 accounts 경로를 만들어주고 우리 APP의 urls을 include해준다. 위에서 아래로 url을 찾기 때문에 우리가 만든 APP의 urls.py를 검색한 뒤 여기에 없으면 auth APP의 urls.py에서 찾는 url을 찾을 것이다.



< accounts/urls.py >


  우리가 만든 APP의 urls.py에 회원 가입 경로를 설정해준다. views 파일에 SignUp 클래스를 만들어 줄 것이므로 위와 같이 view를 넣어준다.



< SignUp 클래스 생성 >


  이 클래스는 제네릭 CreateView이다. form은 auth APP에 있는 UserCreationForm을 사용할 것이고, template과 가입이 끝난 뒤 어디로 redirect 시킬지에 대한 정보를 입력한다. 



< signup.html >


  마지막으로 회원 가입하는 페이지! signup.html 템플릿을 만들어준다.



  이제 지금까지 구현한 회원가입 기능이 잘 동작하는지 확인해본다.



< Signup 페이지 >


  aacounts/signup/ 으로 접속하니 회원가입 페이지가 잘 나오는 것을 확인 할 수 있다. 이제 아이디와 비밀번호를 입력하여 회원가입한다.


< 회원 가입 >



  회원 가입 후 실제로 로그인 해본다.!



< 로그인 시도 >



< 로그인 성공 >


  우리가 회원 가입한 아이디로 로그인이 된 것을 확인 할 수 있었다.


  이로써 auth APP을 이용하여 회원가입 기능을 구현해 보았다.


Django는 Python을 이용한 프레임워크이다.

웹호스팅 프로젝트에서 사용할 웹페이지를 Django를 이용하여 만들어 볼 것이다.!

먼저 간단히, 설치하고 서버를 실행해보는 것부터 시작했다!



(django 설치)


pip 을 이용하여 django를 설치한다!




(설치 확인)


python에 들어가서 import django를 해보아서
django가 잘 설치되었는지 확인한다.

간단한 프로젝트를 만들어서 웹 페이지에 접속해 볼것이다.



(프로젝트 생성)


프로젝트 생성은 위와 같다.

이렇게 하게 되면 디렉토리가 만들어지는데 아래와 같다.



(생성된 디렉토리)


앞으로 manage.py를 이용하여 APP도 만들고 관리를 할 것이다.

그러면 실행해서 한번 웹페이지에 접속해보자!



(서버 실행)


서버 실행은 runserver이다.




(결과)


시도한 결과 연결이 거부되었다.

방화벽탓인지 한번 방화벽을 내려보았다.



(방화벽 오픈)



방화벽을 오픈하여도 같은 현상이 있어서 찾아보니

default로는 로컬호스트에서만 접속할 수 있고, 모든 호스트에서 접속이 가능하게 하려면

0.0.0.0:(port) 로 지정하여 서버를 실행해줘야한다고 한다.



(오픈서버 실행)


서버를 실행하고

다시 접속해본다!



(Disallowd)


허용되지 않은 호스트???..

또 검색을 해본다.

검색을 해본 결과 해당 프로젝트 디렉토리의 settings.py 파일을 수정해주어야한다고 한다.



(settings.py)


ALLOWED_HOSTS 를 *로 모든 사용자가 접속하게 한다.



(접속)


접속해보니 이제 제대로 웹페이지에 접속이 되는 것을 확인할 수 있었다.

+ Recent posts