DB (N:1 / Article - User & Comment - User)

윤동훈·2023년 4월 12일
0
  • Article(N) : User(1)
  • Article 모델과 User 모델 간 관계 설정
  • N개 이상의 게시글은 1개의 회원에 의해 작성될 수 있음

Referencing the User model

1. setting.AUTH_USER_MODEL

  • 반환 값 : 'accounts.User'(문자열)
  • User 모델에 대한 외래 키 또는 M:N관계를 정의할 때 사용
  • models.py의 모델 필드에서 User 모델을 참조할 때 사용

2. get_user_model()

  • 반환 값 : User Object (객체)
  • 현재 활성화된 User모델을 반환
  • 커스터마이징한 User모델이 있을 경우는 CustomUser모델, 그렇지 않으면 User를 반환
  • models.py가 아닌 다른 모든 곳에서 유저모델을 참조할 때 사용

Article - User CRUD

[모델 관계 설정]

월요일 교재 82p 사진 첨부

파일 경로 ==> articles/models.py

$ python manage.py makemigrations

기존에 존재하던 테이블에 새로운 컬럼이 추가되어야하는 상황이기때문에 migration 파일이 곧바로 만들어지지않고 일련의 과정이 필요

월요일 교재 85,86p 사진 첨부

$ python manage.py migrate

CREATE

  • 인증된 회원의 게시글 작성 구현하기
  • 작성하기 전 로그인을 먼저 한 상태로 진행

파일 경로 ==> articles/forms.py

  • ArticleForm 출력시 불필요한 user필드도 함께 출력됨
  • line6 : exclude = ('user',) 로도 대체 가능

파일 경로 ==> articles/views.py

  • 이전 상태의 create함수를 이용해 게시글을 작성하면 외래 키에 저장되어야할 작성자 정보가 누락되기 때문에 create 함수 수정 필요

READ

  • index.html & detail.html에서 각 게시글의 작성자 출력

파일 경로 ==> articles/index.html

파일 경로 ==> articles/detail.html

UPDATE

  • 수정을 요청하는 사람과 게시글을 작성한 사람을 비교하여 본인의 게시글만 수정할 수 있도록 함

파일 경로 ==> articles/views.py

파일 경로 ==> articles/detail.html

  • 해당 게시글의 작성자가 아니라면 수정/삭제 버튼 자체를 출력해주지 않음

DELETE

Comment - User CRUD

  • Comment(N) - User(1)

[모델 관계 설정]

화요일 교재 6p 사진 첨부

파일 경로 ==> articles/models.py

  • Comment 모델에 User모델을 참조하는 외래키 작성
$ python manage.py makemigrations
				
      -위의 Article_User와 같은 과정 필요
                
$ python manage.py migrate 

CREATE

  • 인증된 회원의 댓글 작성 구현
  • 작성하기 전 로그인 미리 한 상태에서 진행

파일 경로 ==> articles/forms.py

  • CommentForm 출력 시 불필요한 피드 user가 출력됨
  • exclude 사용해 제외

파일 경로 ==> articles/views.py

  • 댓글 작성 시 외래 키에 저장되어야 할 작성자 정보가 누락 ==> 막아주기 위해 comments_create 함수 수정, comment.user에 현재 요청한 request.user를 넣어줌

READ

파일 경로 ==> articles/detail.html

  • 댓글과 댓글 작성자가 함께 보이게 수정

DELETE

파일 경로 ==> articles/views.py

  • 삭제 요청한 사람과 댓글 작성자가 같을때만 삭제가 가능하도록 함

  • 추가로 해당 댓글의 작성자가 아니라면, 삭제 버튼 자체를 출력하지 않음

인증된 사용자에 대한 접근 제한

  • is_authenticated와 View decorator 활용

파일 경로 ==> articles/views.py

  • from django.views.decorators.http import require_POST : 최상단 import

파일 경로 ==> articles/detail.html

  • 로그인되지않은 사용자에게는 CommentForm 자체를 보여주지 않음

0개의 댓글