<댓글>
댓글을 저장하기 위한 테이블부터 만들어야 한다.
mysql> CREATE TABLE comments (
-> id INT AUTO_INCREMENT PRIMARY KEY,
-> post_id INT,
-> username VARCHAR(255),
-> content TEXT
-> );
mysql에서 CREATE TABLE로 comments 테이블을 만들었다.
@app.route('/comment/<id>', methods=['POST'])
def comment(id):
if 'username' not in session:
return redirect(url_for('login'))
username = session['username']
content = request.form.get('content')
conn = connectsql()
cursor = conn.cursor()
query = "INSERT INTO comments (post_id, username, content) VALUES (%s, %s, %s)"
value = (id, username, content)
cursor.execute(query, value)
conn.commit()
cursor.close()
conn.close()
return redirect(url_for('read', id=id))
comment 링크로 post 요청을 보내면 댓글을 작성할 수 있게 했다.
로그인이 안 되어 있으면 로그인창으로 이동시킨다.
comments 테이블에 데이터를 넣고 보고 있던 글 페이지로 redirect했다.
<form method="post" action="{{ url_for('comment', id=post.id) }}">
<textarea name="content" required></textarea>
<button type="submit">댓글 달기</button>
</form>
read.html에 댓글 작성 폼을 추가하고 comment로 post 요청을 보내게 하였다.
query = "SELECT * FROM comments WHERE post_id = %s ORDER BY id DESC"
cursor.execute(query, id)
comments = cursor.fetchall()
라우터의 read 링크에서 comments 테이블에서 데이터를 가져와서 read.html로 comments를 보내준다.
<h2>댓글</h2>
{% for comment in comments %}
<p>{{ comment.username }}: {{ comment.content }}</p>
{% endfor %}
read.html에서 comments를 받아서 댓글을 작성자: 내용 의 형식으로 보여준다.
<추천>
추천 데이터를 넣을 테이블 recommend를 먼저 만들어야 한다.
mysql> CREATE TABLE recommend (
-> id INT AUTO_INCREMENT PRIMARY KEY,
-> post_id INT,
-> username VARCHAR(255)
-> );
어떤 게시글에 대한 추천인지 post_id와 누가 추천했는지 username을 속성으로 가진다.
@app.route('/recommend/<id>', methods=['POST'])
def recommend(id):
if 'username' not in session:
return redirect(url_for('login'))
username = session['username']
conn = connectsql()
cursor = conn.cursor()
query = "SELECT * FROM recommend WHERE post_id = %s AND username = %s"
cursor.execute(query, (id, username))
recommended = cursor.fetchone()
if not recommended:
query = "INSERT INTO recommend (post_id, username) VALUES (%s, %s)"
cursor.execute(query, (id, username))
conn.commit()
cursor.close()
conn.close()
return redirect(url_for('read', id=id))
/recommend 링크에서는 우선 로그인이 안 되어 있으면 로그인 창으로 이동시키고 이미 추천이 되어 있는지
recommend 테이블에서 조회를 해본다. 추천이 되어있지 않다면 INSERT로 추천 데이터를 테이블에 넣고
read링크로 redirect한다.
query = "SELECT * FROM recommend WHERE post_id = %s AND username = %s"
cursor.execute(query, (id, username))
recommended = cursor.fetchone()
/read 링크에서도 추천했는지 여부를 recommended 변수에 담아서 read.html 파일로 보낸다.
{% if recommended %}
<p>추천한 글입니다.</p>
{% else %}
<form method="post" action="{{ url_for('recommend', id=post.id) }}">
<button type="submit">추천</button>
</form>
{% endif %}
read.html에서는 추천하지 않았을 때만 추천 버튼을 보이게 한다.
'웹개발' 카테고리의 다른 글
게시판(flask)-제목, 내용 기준 검색 (0) | 2023.10.31 |
---|---|
게시판(flask)-파일 업로드, 다운로드 (0) | 2023.10.31 |
게시판(flask)-CRUD (0) | 2023.10.31 |
게시판(flask)-회원가입, 로그인, 비밀번호 유효성 검사 (0) | 2023.10.31 |
게시판-비밀번호 유효성 검사, 관리자 글 삭제 권한 기능 추가 (0) | 2023.10.29 |