본문 바로가기

Projects/Flask + MongoDB K리그 일정서비스

#5. 경기정보 삭제, 댓글 삭제

관리자 페이지에서 회원정보를 삭제하는 코드를 작성하였는데, 경기정보와 댓글을 삭제하는 것도 이와 유사하다.

 

# 경기 삭제
//경기인덱스를 파라미터로 받는다
@app.route("/delMatch/<matchIdx>", methods=['GET'])
def del_match(matchIdx):
    
    //우선 matches라는 collection에 담긴 경기정보들을 정렬한다
    matches = list(db.matches.find().sort('cheer_datetime', -1))
	
    //경기정보의 id값을 문자열데이터로 바꾸어준다.
    for match in matches:
        match["_id"] = str(match["_id"])
	
    //파라미터에 담긴 경기인덱스에 해당하는 경기를 찾아 삭제한다.
    db.matches.delete_one({'_id': ObjectId(matchIdx)})
    # return render_template('index.html')
	
    //토큰에 담긴 유저정보를 가져온다.
    token_receive = request.cookies.get('mytoken')
    try:
    	//토큰과 같은 유저정보를 users라는 collection에서 찾는다.
        payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
        user_info = db.users.find_one({"user_id": payload["id"]})
		
        //홈화면에 유저정보와 경기정보를 함께 렌더링 해준다.
        return render_template('index.html', matches=matches, user_info=user_info)

    except jwt.ExpiredSignatureError:
        return redirect(url_for("login", msg="로그인 시간이 만료되었습니다."))
    except jwt.exceptions.DecodeError:
        return redirect(url_for("login", msg="로그인 정보가 존재하지 않습니다."))

경기를 삭제하는 부분은, 프론트단에서 delete요청을 처리하는 것이 아니라 api단까지 내려가서 처리하였다. 경기인덱스(mongoDB에서 objectID)에 해당하는 경기정보를 삭제하는 것 이외에는 특별한 것은 없다.

 

# 글 삭제
//댓글id값을 파라미터로 받고
@app.route("/delContent/<contentIdx>", methods=['GET'])
def del_content(contentIdx):
    
    //파라미터에 해당하는 댓글을 찾아 삭제한다.
    db.contents.delete_one({'_id': ObjectId(contentIdx)})
    return jsonify('msg')

회원정보, 경기정보 삭제하는 것과 똑같이 댓글삭제 기능도 별로 다르지 않다. 이것이 가능한 이유는 users라는 collection에 저장되던, matches라는 collection에 저장되던, contents라는 collection에 저장되건, mongoDB에 있는 객체는 각 객체마다 고유의 id값을 갖는다. 즉 삭제하고자 하는 객체의 id값만 알면 되고, 이를 파라미터로 전달해주기만 하면 된다.