1. 게시글 삭제 기능 구현
@app.route('/question_delete', methods=['GET','POST'])
def question_delete():
id = request.args.get('id', '아이디')
q_delete = db_session.query(QuestionContent).filter_by(id=id).first()
if q_delete:
db_session.delete(q_delete)
db_session.commit()
flash('글이 삭제되었습니다.')
return redirect('/mypage')
else:
return render_template('/user_templates/main.html')
2. 게시글 수정 기능 구현
@app.route('/myquestion_edit', methods=['GET', 'POST'])
def myquestion_edit():
title = request.args.get('title', '제목')
category = request.args.get('category', '카테고리')
content = request.args.get('content', '내용')
id = request.args.get('id', '아이디')
date = request.args.get('date', '날짜')
edit_question = db_session.query(QuestionContent).filter_by(id=id).first()
print(request.method)
if request.method == 'POST':
if edit_question:
edit_question.create_date=datetime.now()
if request.form['now_title'] != edit_question.title:
edit_question.title = request.form['now_title']
if request.form['now_content'] != edit_question.content:
edit_question.content = request.form['now_content']
db_session.add(edit_question)
db_session.commit()
return render_template('/user_templates/question.html',
title=edit_question.title, date=edit_question.create_date, category=category, content=edit_question.content)
else:
return render_template('/user_templates/myquestion_edit.html', title=title, category=category,
content=content, id=id, date=date)
👉 게시글 삭제와 수정은 자신의 글에서만 가능
3. 게시글 검색 기능 구현
@app.route('/question_search', methods=['GET','POST'])
def question_search():
if request.method == 'POST':
search = request.form['search']
limit = 5
page = int(request.args.get('page', type=int, default=1))
question_list = []
content_list = db_session.query(QuestionContent).filter(QuestionContent.is_secret == 0).all()
for i in content_list:
if search in i.content:
question_list.append(i)
tot_cnt = len(question_list)
if page == 1:
question_list = question_list[-((page - 1) * limit + limit):]
else:
question_list = question_list[-((page - 1) * limit + limit):-((page - 1) * limit)]
last_page_num = math.ceil(tot_cnt / limit)
block_size = 5
block_num = int((page - 1) / block_size)
block_start = (block_size * block_num) + 1
block_end = block_start + (block_size - 1)
if session.get('u_id'):
return render_template('/user_templates/q&a.html', question_list=question_list,
limit=limit, page=page, tot_cnt=tot_cnt,
block_size=block_size, block_num=block_num, block_start=block_start,
block_end=block_end, last_page_num=last_page_num, now_user=session['u_id'])
else:
return render_template('/user_templates/q&a.html', question_list=question_list,
limit=limit, page=page, tot_cnt=tot_cnt,
block_size=block_size, block_num=block_num, block_start=block_start,
block_end=block_end, last_page_num=last_page_num)
else:
return render_template('/user_template/q&a.html')
👉 검색하고자 하는 text를 search로 입력받은 후, 게시글 db에서 비밀글이 아니면서 search가 포함된 content를 가진 행을 찾음
4. 카테고리 검색 기능 구현
@app.route('/category_search', methods=['GET','POST'])
def category_search():
category = request.args.get('category', '카테고리')
limit = 5
page = int(request.args.get('page', type=int, default=1))
question_list = db_session.query(QuestionContent).filter(QuestionContent.is_secret == 0, QuestionContent.category == category).all()
tot_cnt = len(question_list)
if page == 1:
question_list = question_list[-((page - 1) * limit + limit):]
else:
question_list = question_list[-((page - 1) * limit + limit):-((page - 1) * limit)]
last_page_num = math.ceil(tot_cnt / limit)
block_size = 5
block_num = int((page - 1) / block_size)
block_start = (block_size * block_num) + 1
block_end = block_start + (block_size - 1)
return render_template('/user_templates/q&a.html', question_list=question_list,
limit=limit, page=page, tot_cnt=tot_cnt,
block_size=block_size, block_num=block_num, block_start=block_start,
block_end=block_end, last_page_num=last_page_num,now_user=session['u_id'])
👉 카테고리별 게시글을 보여줌. 만약 '동영상 업로드' 카테고리를 누르면 카테고리가 '동영상 업로드'인 글만을 보여줌
5. 게시글 창 및 댓글 등록 기능 구현
@app.route('/question', methods=['GET', 'POST'])
def question():
title = request.args.get('title', '제목')
category = request.args.get('category', '카테고리')
content = request.args.get('content', '내용')
id = request.args.get('id', '아이디')
date = request.args.get('date', '날짜')
writer = request.args.get('writer', '글쓴이')
comment_list = db_session.query(Comment).filter_by(question_id=id).all()
if not session.get('u_id'):
return render_template('/user_templates/question.html', title=title, date=date, category=category,
content=content, id=id, writer=writer, comment_list=comment_list)
else:
if request.method == 'POST':
comment_content = request.form['content']
if len(comment_content) > 50:
flash("댓글제한수를 넘겼습니다. 50자 이하로 다시 입력해주세요.")
return render_template('/user_templates/question.html', title=title, date=date, category=category,
content=content,
id=id, now_user=session['u_id'], writer=writer, comment_list=comment_list)
else:
new_comment = Comment(comment_content=comment_content, commenter=session['u_id'], question_id=id)
db_session.add(new_comment)
db_session.commit()
comment_list = db_session.query(Comment).filter_by(question_id=id).all()
return render_template('/user_templates/question.html', title=title, date=date, category=category,
content=content, id=id, now_user=session['u_id'], writer=writer, comment_list=comment_list)
else:
return render_template('/user_templates/question.html', title=title, date=date, category=category, content=content,
id=id, now_user=session['u_id'], writer=writer, comment_list=comment_list)
👉 로그인 한 상태라면 댓글을 쓸 수 있고, 로그아웃 상태라면 댓글 등록 칸이 안보이게 만들어줌. 댓글은 50자 이하로 제한시켜 50자 이상이면 flash 창을 띄워줌
6. 댓글 삭제 기능 구현
@app.route('/comment_delete', methods=['GET','POST'])
def comment_delete():
title = request.args.get('title', '제목')
category = request.args.get('category', '카테고리')
content = request.args.get('content', '내용')
id = request.args.get('id', '아이디')
date = request.args.get('date', '날짜')
writer = request.args.get('writer', '글쓴이')
c_delete = db_session.query(Comment).filter_by(id=id).first()
if c_delete:
db_session.delete(c_delete)
db_session.commit()
comment_list = db_session.query(Comment).all()
return render_template('/user_templates/question.html', title=title, date=date, category=category,
content=content, id=id, now_user=session['u_id'], writer=writer,
comment_list=comment_list)
else:
return render_template('/user_templates/main.html')
👉 자신이 쓴 댓글만 삭제 버튼이 보이고 삭제할 수 있음