비로그인 작성글 수정,삭제 기능 구현하기 1

Red_Panda·2021년 4월 9일
1

기존에 비로그인상태에서 작성한 글은 수정, 삭제가 불가능 했다.

기능을 조금 업데이트해서 비로그인 상태 일때 글을 작성하면 비밀번호를 입력받고, 비로그인 작성글의 삭제 버튼을 눌렀을때 글에 저장된 비밀번호를 확인 후 삭제하도록 구현해 볼 생각이다. 삭제를 구현한 다음, 수정도 적용할 것이다.

password=db.Column(db.String(20), nullable=True)

먼저, Question 모델에 password 칼럼을 만들었다.

그리고 비로그인상태일때 password를 입력받아 저장하려면 로그인상태, 비로그인 상태의 작성할때 form을 다르게 해야했다.


처음에는 QuestionForm에 password = PasswordField를 넣고 비로그인때 작성글은 반드시 비밀번호를 입력하게 하기위해 DataRequired를 적용했다.

그리고 question.form.html에 form을 나타낼때 g.user로 판단해서 비로그인 상태일때만 비밀번호를 누르는 칸을 나타냈다.

역시, 로그인상태일때 비밀번호칸만 안나오는거지 validator때문에 필수입력해야 한다. 그래서 로그인상태, 비로그인상태 폼을 나누기위해 하나 더 만들어봤다.

그리고 create에 이렇게 적용했다. 기본값으로 QuestionForm()을 먼저 넣고, 만약 비로그인상태면 form=QuestionForm2() 로 form을 바꿔지도록..
이렇게 실행하면 기본 form인 QuestionForm()에 password를 입력받는 부분이 없어서 이런식으로 오류가난다.


그럼 아예 처음에 g.user에따라서 form을 정해주고나서 진행하면 어떻게 될까 하고 수정해봤다.


비로그인일때 글작성 : 비밀번호를 반드시 입력해야한다.


로그인일때 글작성 : 비밀번호 입력칸이 없고, 비밀번호 입력없이 글이 작성된다.

비로그인일때 작성한글에 password가 db에 잘 저장됐다.

그리고, 비로그인상태에서 작성한글은 저장된 비밀번호를 안다면 누구나 수정, 삭제할 수 있게 하기위해서 question.user를 이용해 수정, 삭제버튼 노출방식을 아래와 바꿨다.

<기존>
로그인 상태 : 자신이 쓴 글(질문, 답변)에 대해서만 수정, 삭제버튼 노출

비로그인 상태 : 모든 글에 대한 수정, 삭제버튼 노출x

<수정 후>
로그인 상태 : 자신이 쓴 글 포함, 비
이제 비로그인상태에서 작성한글에도 삭제, 수정 버튼이 노출된다.

비 로그인 상태 : 로그인상태에서 작성한 글은 수정, 삭제 버튼은 못보지만 비로그인 상태에서 작성한 글은 삭제, 수정 버튼이 노출된다.

물론, 어느 상태든 비로그인 상태에서의 글을 삭제, 수정하려면 비밀번호를 입력하게 된다.


먼저 비밀번호확인 입력값을 받는 form을 만들었다.

question.user를 통해 이 글이 로그인상태에서 작성됐는지 확인을 한다. 비로그인 상태에서 작성된경우 form=CheckPassword()로 form을 지정해준다. 그리고 요청 방식과 validate 검사 후, password값에 form에서 입력한 값을 저장한다.

다음으로 이 paasword값과 현재 질문글의 비밀번호인 question.password를 비교해서 다르면 flash로 오류처리를 해주고, 같으면 삭제가 진행된다.

실행하니, 로그인 상태에서 자신이 쓴글, 비로그인상태의 글에 삭제, 수정 버튼이 잘 나왔고

비 로그인 상태에서도 의도한대로 버튼이 노출되고 있다.

비로그인 상태에서 작성된글의 삭제 버튼을 누르면 이렇게 비밀번호를 입력하라는 form이 나온다.

비밀번호가 다르면 이렇게 오류처리가된다.


이 코드중에서 form에 입력받은 값을 잘못 저장한건지 비밀번호가 일치해도 저렇게 오류처리가된다.

해결방법을 계속 고민해봐야겠다. 근데 곧 코딩테스트 시험이 있어서 그 이후에나 다시 올듯하다.

profile
신입 개발자

0개의 댓글