관리자 페이지에서 회원정보를 삭제하는 코드를 작성하였는데, 경기정보와 댓글을 삭제하는 것도 이와 유사하다.
# 경기 삭제
//경기인덱스를 파라미터로 받는다
@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값만 알면 되고, 이를 파라미터로 전달해주기만 하면 된다.
'Projects > Flask + MongoDB K리그 일정서비스' 카테고리의 다른 글
#6. 프로젝트 후기 (0) | 2021.06.13 |
---|---|
#4. 상세페이지 구현 | 경기 상세정보와 댓글 (0) | 2021.06.13 |
#3. 관리자 페이지 | 경기정보, 회원비활성화 (0) | 2021.06.13 |
#2. 회원가입 및 로그인 (0) | 2021.06.13 |
#1. 홈페이지 화면 설계 (0) | 2021.06.13 |