구현하기에 앞서 댓글 수정 및 삭제는 작성자만 수행할 수 있는 기능이라는 생각이 들어 유저를 구분해줄 수 있는 jwt를 사용해주어야 겠다는 생각이 들었다.
PUT
구현하기 앞서 댓글의 경우 기본적으로는 게시물 수정과 비슷하나, 게시물 id 뿐만아니라 해당 댓글의 id 또한 필요함을 알 수 있다.
따라서
class CommentDetail(Resource):
@classmethod
@jwt_required()
def put(cls, post_id, comment_id):
comment_json = request.get_json()
username = get_jwt_identity()
author_id = UserModel.find_by_username(username).id
comment = CommentModel.find_by_id(comment_id)
post = PostModel.find_by_id(post_id)
# 댓글 존재 여부 확인
if not comment:
return {"Error": "댓글을 찾을 수 없습니다."}, 404
# 댓글의 저자와, 요청을 보낸 사용자가 같다면 수정을 진행할 수 있다.
if comment.author_id == author_id:
comment.update_to_db(comment_json)
else:
return {"Error": "댓글은 작성자만 수정할 수 있습니다."}, 403
return comment_schema.dump(post), 200
이렇게 작성해주었다.
테스트를 수행해보면
이제 진행한 뒤 GET으로 확인해 보면
잘 수정이 되었습니다!
이때 만약 사용자를 다르게 한다면
이렇게 에러 메시지를 보여주게 됩니다.
DELETE
put과 비슷한 방법으로 진행됩니다. 삭제 또한 댓글을 쓴 작성자 본인만이 삭제할 수 있게 진행되어야 하므로 jwt를 사용합니다.
@classmethod
@jwt_required()
def delete(cls, post_id, comment_id):
username = get_jwt_identity()
author_id = UserModel.find_by_username(username).id
post = PostModel.find_by_id(post_id)
comment = CommentModel.find_by_id(comment_id)
if comment:
if (post.id == post_id) and (comment.author_id == author_id):
comment.delete_from_db()
return {"message": "댓글이 성공적으로 삭제되었습니다."}, 200
else:
return {"Error": "댓글은 작성자만 삭제할 수 있습니다."}, 403
else:
return {"Error": "댓글을 찾을 수 없습니다."}, 404
진행해보면
라는 문구가 반겨줍니다. 다시 GET 요청으로 확인해보면
7번 댓글이었던 졸려용이 사라졌다는 것을 볼 수 있습니다.
put과 마찬가지로 babo가 작성한 6번 댓글을 다른 사람이 삭제하려고 한다면
이런 오류 메시지를 볼 수 있습니다.
'Python > FLASK' 카테고리의 다른 글
[플라스크] - 비즈니스 로직 (0) | 2022.11.27 |
---|---|
플라스크 - WSGI? (0) | 2022.11.13 |
인스타그램 클론코딩하기 (0) | 2022.11.06 |
오류 모음집 (0) | 2022.10.09 |
직렬화/ 역직렬화 처리하기 (0) | 2022.09.12 |