비회원 글 수정기능 - 1

Red_Panda·2021년 5월 29일
0

오늘은 다른 공부들을 하느라 한동안 못했던 웹페이지 기능 구현 추가를 시도 했다.

비회원 작성글 삭제 기능은 구현 했지만 수정 기능은 하지 않았었기 때문에 이 기능을 추가하기로 했다.

삭제기능이 생각보다 간단해서 수정기능도 간단할 줄 알았는데 간단하지 않았다.

아직 성공하지 못했지만, 최대한 해본 결과는 이렇다.

    elif not question.user: # 비회원 작성글
        form = QuestionForm2(obj=question)
        if request.method == 'POST' and form==QuestionForm2(obj=question): # 수정 후 저장하기 버튼 누를때
            form = QuestionForm2()
            if form.validate_on_submit():
                form.populate_obj(question)
                question.modify_date = datetime.now()
                db.session.commit()
                return redirect(url_for('question.detail', question_id=question_id))

        elif request.method == 'POST' : # 비밀번호 확인 버튼
            form = CheckPassword()
            password = form.password_check.data
            if password == question.password:
                form = QuestionForm2(obj=question)
            elif password != question.password:
                flash('비밀번호 틀림')
                return render_template('question/no_login_password.html', form=form)
            #return render_template('question/question_modify_form.html', form=form)

        elif request.method=='GET': # 수정 버튼
            form = CheckPassword()
            #if password!=question.password:
             #   if password!=None:
              #      flash('비밀번호가 다릅니다.')
            return render_template('question/no_login_password.html', form=form)
            #else:
             #   form = QuestionForm2(obj=question)
              #  return render_template('question/question_modify_form.html', form=form)
        return render_template('question/question_modify_form.html', form=form)

수정 버튼을 누르면 GET 요청이 발생하므로, request.method=='GET'을 이용해 CheckPassword() form을 불러와 비밀번호를 확인 하도록 했다.

그리고, 비밀번호 확인 버튼을 누를때와 QuestionForm2()에서 수정한 내용을 저장하기 버튼을 누를때 둘다 POST 요청이 발생한다.


2개의 request.method=='POST'일때 form에따라 각 페이지를 나눠 처리하면 될 것 같아 각 페이지에서 적절한 form을 이용하는지 확인하기 위해 템플릿 페이지마다 위처럼 form을 출력해줬다.

먼저 의도한대로 form은 잘 출력 됐다. 그런데 form을 기준으로 POST 요청을 나누는데 안됐다.

비밀번호 확인 버튼 기능인 elif 부분에서 request.method=='POST' 이후에 and form==CheckPassword()를 조건에 추가하면, 비밀번호를 검사하지않고 바로 내용 수정 페이지를 불러오는 오류가 난다.

하지만 조건에서 form==CheckPassword()를 없애니, 비밀번호 확인 작업은 정상적으로 작동되어 비밀번호 password가 question.password와 일치할때만 내용수정 템플릿을 불러왔다.

하지만, 내용을 수정하고 저장하니 문제가 발생했다.

이때 저장 버튼도 POST요청이 발생하는데 의도한대로 첫번째 if 조건(수정한 내용을 저장하는)먼저 실행 되는게 아니라, 아까 비밀번호 확인시 사용되는 if 다음에 있는 elif 함수가 작동하는건지 저장하기 버튼을 누르면

이런식으로 비밀번호가 틀렸다고 비밀번호 확인 페이지가 나와버린다.

아마도 if문에서 form에 대해 처리하는 방법이 잘못된 것 같은데, 뭔가 디테일 부분에서 놓치고 있는듯 하다. 왜 이렇게 생각하냐면, 현재 form 조건이 없는 elif request.method=='POST' 부분만 실행되고 있기 때문이다.

해당 문제에대해서 좀 더 알아보고 해결해서 다음 글을 작성해야 겠다.

profile
신입 개발자

0개의 댓글