본문 바로가기
source-code/Django

Blogs App _ CRUD

by mattew4483 2021. 1. 5.
728x90
반응형

대망의 CRUD 시간이다.

회원가입을 구현했으니... CRUD에서도 이를 적용시켜줘야 한다.

이게 무슨 뜻? ↓

게시글 열람(R)모든 사용자 O

게시글 생성(C)로그인 한 사용자만 O

게시글 수정(U)삭제(D)해당 게시글 작성자만 O

 

말만 들어도 앞이 캄캄. 어떻게 구현하면 좋을까.

 


1. model 수정

현재 각 게시글들은 이를 작성한 사람, 즉 소유자를 고려하지 않은 상태다.

게시글 별 소유자 확인이 필요하므로 owner라는 field를 model에 추가한다!

models.py

인증 기능을 구현할 때 사용했던 User 테이블! django에서 기본적으로 제공하는 모델이라 배웠었다.

이를 각 게시글과 연결하기 위해 model.py에서 import!

 

slugify라는 함수도 import 했는데, 원래 요놈은 단어를 알파벳 소문자, 숫자, 밑줄, 하이픈으로 바꿔주는 함수다.

지금은 slug 필드를 자동으로 채우기 위해 불러왔다!

 

models.py

기존 작성했던 Post 모델에 owner라는 field를 추가한다!

한 유저는 여러 개의 게시글을 작성할 수 있으므로 ForeinKey 관계로 표현!

현재 owner가 정해지지 않은 Post들이 있으므로 null=True도 지정해주자.

form에서도 owner는 입력하지 않아도 되도록 blank=True 지정!

 

2. view 작성

본격적인 고생길, view를 작성할 시간이다.

현재 view 작성은 크게 두 가지 흐름으로 이뤄진다.

첫째, 각 게시글의 소유자 확인.

둘째, 이를 바탕으로 CRUD 권한 부여.

 

첫 번째 기능 view를 만든 이후에, 이를 상속시켜 두 번째에 써먹어볼 예정!

 

1) 소유자 확인 view 작성

각 게시글에 대한 CRUD는 해당 앱 내에 작성하지만, 소유자 확인은 어느 앱에도 속하지 않는 기능이다.

따라서 프로젝트 파일 내 view에다가 작성!

views.py

우선 AccessMixin 이란 녀석을 import!

얘가 뭐길래? view 처리 진입 단계에서 적절한 권한을 갖추었는지 판별할 때 사용하는 클래스라고 한다.

이 녀석을 통해 해당 게시글에 대한 owner인지 아닌지를 판단한다.

owner면 정상 처리, 아니면 403 에러를 띄워준다.

 

그런데 무슨 소린지 정말 모르겠다! 쓰라니까 썼는데...

그냥 템플릿 상에서 user와 owner을 비교해 같으면 수정 및 삭제 버튼을 띄워주는 방식이 훨 훨 훨 나은 것 같다.

 

2) C

앞으로 작성할 CRUD는 블로그 게시글에 대한 사항! 즉 blogs앱 내의 view에 작성한다.

views.py

우선 요 4줄을 import!

 

이 중 두번째, LoginRequiredMixin은 @login_required()를 클래스에 적용할 때 사용한다.

즉 로그인 된 경우는 정상처리, 그렇지 않으면 로그인 페이지로 redirect!

 

제일 밑 줄은 우리가 방금 만든 OwnerOnlyMixin을 가져온 것!

 

CreateView를 사용한 모습! 설명은 주석을... 흐아아.

 

3) R U D

각 각 ListView, UpdateView, DeleteView를 사용했다!

 

3. template 작성

post_form.html

신규 게시글을 작성하는 페이지.

 

post_change_list.html

수정 및 삭제할 수 있는 게시글을 띄워주고 해당 링크로 보내주는 페이지.

 

post_confirm_delete

게시글 삭제를 재확인하는 페이지.


뒤로 갈수록 굉장히 대충 한 느낌이...

일단 클래스형 뷰를 사용했기 때문에... 치라는 대로 치는 듯한 느낌이 강하게 든다.

그렇기 때문에 함수형 뷰로도 CRUD를 도전해볼 예정.

728x90
반응형

'source-code > Django' 카테고리의 다른 글

Blogs App _ 인증 기능 with 사용자 지정  (0) 2021.01.07
Blogs App _ CRUD with 함수형  (0) 2021.01.06
Blogs App _ 인증 기능  (0) 2021.01.05
Blogs App _ 검색 기능  (0) 2021.01.04
Blogs App _ 댓글 기능  (0) 2021.01.02