관리자 화면을 사용하는 경우를 제외하고는 미리 설정한 비밀번호를 그동안 사용하지 않았어요. 그래서 내 블로그에 누구든지 마음대로 글을 작성하거나 수정할 수 있다는 것을 눈치챘을 거예요. '네가 누군지 모르겠지만, 내 블로그에 글 쓰는 것을 원치 않아!'라는 생각이 들 거예요. 그래서 아무나 들어와서 글을 쓰지 못하도록 뭔가 만들 수 있답니다.
블로그 글 작성/수정 편집 허가하기
첫 번째로 보안을 위해 무언가를 할 거예요. 우리는 로그인 한 사용자만 글에 접근할 수 있도록 post_new, post_edit, post_draft_list, post_remove 그리고 post_publish의 뷰를 보호할 거예요. Django는 decorators 를 사용해 도움을 주고 있어요. decorators는 고급 주제이긴 해요. 지금 기술적인 것에 걱정하지 마세요. 여러분은 나중에 이해하게 될 거예요. Django에서 제공하는 django.contrib.auth.decorators 모듈 안의 decorator를 사용하는데, 이것을 login_required라고 해요.
그다음, blog/views.py 을 수정하고 import를 하는 영역에 아래와 같이 한 줄을 추가해 볼 거예요.
from django.contrib.auth.decorators import login_required
그리고 각각의 post_new, post_edit, post_draft_list, post_remove 그리고 post_publish 뷰의 앞에 아래와 같이 @login_required라는 한 줄을 추가해 주세요.
@login_required
def post_new(request):
[...]
잘했어요! 이제 http://127.0.0.1:8000/post/new/ 로 접속해보세요. 다른 점을 찾으셨나요?
만약 비어있는 폼 페이지만 보인다면, 이미 관리자 화면을 통해 로그인한 상태일 거예요. http://127.0.0.1:8000/admin/logout/ 로 로그아웃을 한 다음, http://127.0.0.1:8000/post/new 로 다시 접속해보세요.
사랑스러운 에러 중 하나를 보게 될 거예요. 정말 흥미로운 사실 중 하나: 추가한 Decorator는 로그인 페이지로 우리를 돌려보낼 거예요. 아직 사용할 수 없지만, "페이지를 찾을 수 없습니다. (404)"라는 에러를 나타내죠.
post_edit, post_remove, post_draft_list, post_publish 위에도 decorator를 추가하는 것을 잊지 마세요.
야호, 목표지점까지 다 왔어요! 이제 다른 사람들이 내 블로그에 마음대로 글을 쓸 수 없답니다. 그런데 관리자인 나도 새 글을 작성할 수가 없네요. 그럼 작성할 수 있게 수정해 봅시다.
사용자 로그인
이제 우리는 사용자와 패스워드 그리고 인증을 구현할 수 있는 많은 종류의 마법의 도구를 사용할 수 있었어요. 그러나 모든 도구를 정확히 사용하는 것은 꽤 복잡하지요. 장고에서 제공되는 인증 도구를 좀 더 사용할 수 있게 만들 거예요.
일단 인증도구부터 import할거에요
blog\urls.py를 열어 다음과 같이 import 해주세요!
from django.urls import path
from . import views
from django.contrib.auth.views import LoginView, LogoutView