카테고리 없음

flask로 웹 서버 구축해보기 #4

Lluvia7319 2023. 11. 14. 18:18

이번 글에서는 회원 정보 수정과 유저 삭제에 대한 기능 구현에 대하여 써보려 한다.

 

HTML 코드와 CSS코드는 내가 작성한 코드들이 아니기에 밝히기 어렵다는 점을 말씀드린다.

 

<회원 정보 수정>

@bp.route('/modify_account', methods=['GET', 'POST'])
@login_required
def modify_account():
    if request.method == 'POST':
        before_name = current_user.name
        new_name = request.form['userName']

        current_user.name = new_name

        old_path = os.path.join('db_tp', 'item_img', before_name)
        new_path = os.path.join('db_tp', 'item_img', new_name)

        try:
            os.rename(old_path, new_path)

            current_user.phone_number = request.form['phoneNumber']

            db.session.commit()

            flash('계정이 성공적으로 수정되었습니다.', 'success')
            return redirect(url_for('main.index'))

        except FileNotFoundError:
            flash('디렉토리를 찾을 수 없습니다.', 'error')

    return render_template('modify_account.html')
  • 사용자가 POST 요청으로 회원 정보 수정을 시도할 때 동작한다.
  • 폼에서 새로운 사용자 이름(userName)과 전화번호(phoneNumber)를 받아와서 현재 사용자의 정보를 업데이트한다.
  • 업데이트된 사용자 이름을 기반으로 이전 디렉토리 경로와 새 디렉토리 경로를 생성한다.
  • os.rename을 사용하여 디렉토리 이름을 변경합니다. 이부분은 사용자 이름 변경시에 사용자가 쓴 글에 올린 사진이 저장되는 디렉토리의 이름을 변경한다.
  • 다른 필드(여기서는 전화번호)도 필요에 따라 업데이트한다.
  • 변경된 정보를 데이터베이스에 커밋하고 성공 메시지를 플래시에 추가한 후 메인 페이지로 리다이렉트한다.

 

<회원 삭제>

@bp.route('/delete_account', methods=['POST'])
@login_required
def delete_account():
    try:
        user_upload_folder = os.path.join('db_tp/static/uploads',  current_user.name)

        shutil.rmtree(user_upload_folder)
    except Exception as e:
        flash(f'회원 삭제 에러: {str(e)}')
        return redirect(url_for('main.index'))

    try:
        db.session.delete(current_user)
        db.session.commit()
    except Exception as e:
        flash(f'회원 데이터 삭제 에러: {str(e)}')
        return redirect(url_for('main.index'))

    flash('회원 탈퇴가 완료되었습니다.', 'success')
    return redirect(url_for('main.index'))
  • 사용자가 POST 요청으로 회원 삭제를 시도할 때 동작한다.
  • 현재 로그인된 사용자의 업로드 폴더를 찾아서 삭제한다. (shutil.rmtree 함수를 사용하여 디렉토리 전체를 삭제)
  • 데이터베이스에서 현재 사용자를 삭제하고 커밋한다.
  • 성공 메시지를 플래시에 추가한 후 메인 페이지로 리다이렉트한다.

 

다음 글에서는 관리자 페이지에서의 회원 정보 수정과 회원 삭제에 대하여 쓰도록 하겠다.