카테고리 없음
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 함수를 사용하여 디렉토리 전체를 삭제)
- 데이터베이스에서 현재 사용자를 삭제하고 커밋한다.
- 성공 메시지를 플래시에 추가한 후 메인 페이지로 리다이렉트한다.
다음 글에서는 관리자 페이지에서의 회원 정보 수정과 회원 삭제에 대하여 쓰도록 하겠다.