TIL Day 35.

Jen Devver·2024년 4월 2일

내배캠 TIL

목록 보기
40/91

웹개발 팀프로젝트: 게시판, 댓글 CRUD 구현

백엔드

게시글, 댓글 DB는 분리해서 저장..!

댓글 CRUD

.venv 환경 설정하기
pip install flask
pip install flask_sqlalchemy

DB를 이용하기 위해서 우선 데이터베이스 프레임을 만들어줘야 한다.

class Comment(db.Model):
	id = db.Column(db.Integer, primary_key=True) # 고유 id는 필수
    username = db.Column(db.String, nullable=False)
    contents = db.Column(db.String, nullable=False) # 각 컬럼 지정
    
    def __repr__(self): # 데이터 표시해줌
    	return f'{self.username}: {self.contents}'
        
with app.app_context():
	db.create_all() # 데이터베이스 프레임 생성
    
# 이후 페이지에 표시될 요소들을 정해줌

@app.route('/')
def home():
	comment_list = Comment.query.all() # 데이터베이스에 저장된 데이터 모두 불러오기
    return render_template('test.html', data = comment_list) # test.html을 템플릿으로 데이터 표시
    

@app.route('/test')
def write_comment(): # 댓글 작성 기능
	# 데이터 받아오기
    username_comment = request.args.get("username")
    contents_comment = request.args.get("contents")
    
    # 데이터 db에 저장
    comment = Comment(username=username_comment, contents=contents_comment) # 받은 데이터를 데이터에 맞추어주기
    db.session.add(comment) # db에 추가
    db.session.commit() # db에 저장
    return redirect(url_for('home')) # 저장 완료 후 돌아가기

## 수정 기능은 아직 구현 중 ##

@app.route('/test/delete', methods = ['POST'])
def delete_comment(): # 댓글 삭제 기능
	contents = request.form.get('contents') # contents 를 불러온다
    comment = Comment.query.filter_by(contents=contents).first() # 댓글 내용이 일치하는 댓글을 불러오기 시도
    if comment: # 일치하는 댓글이 있으면
    	db.session.delete(comment) # 해당 댓글 삭제
        db.session.commit() # 데이터베이스 현재 상태 저장
    message = '댓글이 삭제되었습니다.'
    return redirect(url_for('home', message = message)) # 돌아가기
    
if __name__ == "__main__":
	app.run(debug=True) 
  • 하면서 겪은 어려움
    특정 댓글만 삭제하게 하는 기능 - 기존에는 데이터베이스를 전부 초기화하는 것만 써보았기 때문에 특정 댓글만 어떻게 삭제하는지 몰랐다. filter_by 를 사용하여 해결. 하지만 내용이 일치하는 경우에 삭제를 하도록 해놓았기 때문에 같은 내용의 댓글이 있을 경우 원래 삭제하려던 댓글이 아닌 같은 내용의 다른 댓글이 삭제될 수 있다. 이 방법은 수정 기능을 다 구현하고 더 알아보는 걸로.

프론트엔드

현재 상태는 우선 대충 틀만 잡아놓았다. 모양은 백엔드 구현 후 수정할 것.

해결 못한 문제점

  • 한 개의 글을 카드에 하나씩 담아놓았는데 카드 자체를 누르면 창이 뜨게 하고 싶었는데 구현하지 못했다. 우선 더보기 버튼을 만들어놓았는데 카드를 눌러서 글을 볼 수 있도록 해보는 것도 시간이 남으면 할 것.
  • 글을 모달 창으로 열어보려고 했는데 모달 창 안에 다시 댓글 창을 넣어야 해서 우선은 보류.
profile
발전 중...

0개의 댓글