어제는 데이터베이스를 받아서 검색기능을 넣을 곳을 생각하며 구상하는 것까지 했습니다.
이제는 어떻게 만들것인지는 찾아 가면서 만들어 보도록 하겠습니다.
어제 까지 만들었던 부분에서 생겼던 문제로는 get방식으로 받아서 리스트 전체를 나오게 하는건 되었지만 post방식으로 검색을 했을 때 값이 나오게 하는 것이 안되었다..
튜터님과 검색을 통해서 알아본 결과!
만들수가 있었습니다!
이제 여기서 데이터 베이스의 값을 가져와서 내가 보고 싶은 부분만 볼 수 있도록 검색기능까지 구현 했습니다.
이렇게 데이터 최신순으로 정렬을 할 수 있도록 하였으며
글 작성 페이지에서 글을 작성해서 데이터베이스에 저장하면
최신 작성글에 작성이 되며
전체 글 페이지에서도 작성을 할 수 있게 됩니다.
각 영화의 페이지에 들어가서 내가 원하는 영화의 페이지의 정보와 댓글을 볼 수 있으며
작성을 하면
바로 반영이 되어서 볼 수 있는 것을 확인 할 수 있습니다!
app.py 확인
더보기
@app.route("/")
def 메인화면():
posts = Posting.query.order_by(desc(Posting.date)).limit(3).all()
return render_template("메인화면.html", posts=posts)
@app.route("/게시글작성", methods=["GET", "POST"])
def 게시글작성():
# 글작성의 내용을 입력하고 작성 완료를 누르면 동작
if request.method == "POST":
# Posting테이블의 칼럼에 맞추어 변수의 값 입력
new_Posting = Posting(
user_id='123', # 아직 유저 정보 없음....
username=request.form['username'],
movie_title=request.form['movie_title'],
posting_title=request.form['posting_title'],
review=request.form['review'],
grade='3', # 데이터 반영 필요
date=datetime.now()
)
# 데이터베이스 세션에 추가
db.session.add(new_Posting)
# 변경 사항 커밋
db.session.commit()
# 데이터 값 저장 만하고 보여줄 필요는 없으니 리턴 값 없음
return render_template("게시글 작성.html")
@app.route("/전체글조회", methods=["POST", "GET"])
def 전체글조회():
# POST 입력을 받고 왔으면 조건문 입장
if request.method == "POST":
# post로 가져온 매개변수를 각각 넣어준다.
find = request.form.get("find")
tag = request.form.get("tag")
# Posting 테이블에서 tag=검색 조건에 해당하는 칼럼에서 find의 내용을 포함하는 값이 있다면 모두 가져온다.
posts = Posting.query.filter(getattr(Posting, tag).like(f"%{find}%")).all()
# 검색기능을 하지 않고 처음들어올 때에는 모든 게시글이 보일 수 있도록 한다.
else:
posts = Posting.query.all()
return render_template("전체글 조회.html", posts=posts) # 게시글 내용
@app.route("/게시글조회", methods=["POST", "GET"])
def 게시글조회():
# 전체글에서 게시글을 클릭해서 들어올 때에 해당하는 게시글에 맞추어서 글과 댓글을 가져올 수 있도록
post_id = request.args.get("post_id")
# 게시글 아이디에 맞추어 글의 내용을 가져온다.
posts = Posting.query.filter_by(id=post_id).first()
# POST시 댓글 저장한다.
if request.method == "POST":
new_Comment = Comment(
post_id=post_id,
user_id="심청이",
detail=request.form['detail'],
date=datetime.now()
)
# 데이터베이스 세션에 추가
db.session.add(new_Comment)
# 변경 사항 커밋
db.session.commit()
# 게시글 내용 표시
comments = Comment.query.filter_by(post_id=post_id).all()
return render_template("게시글 조회.html", comments=comments, posts=posts)
if __name__ == "__main__":
app.run(debug=True)
with app.app_context():
db.create_all()
html 확인
더보기
// 메인화면
<div class="container">
<div class="postcontainer">
<h2>최신 작성글</h2>
{% if posts %}
{% for post in posts %}
<div class="post">
<div class="post-box">
<h2>{{ post.movie_title }}</h2>
<p><strong>작성자:</strong> {{ post.username }}</p>
<p><strong>내용:</strong> {{ post.review }}</p>
</div>
</div>
{% endfor %}
{% endif %}
</div>
</div>
// 전체글 조회
<div class="content">
{% for post in posts %}
<a href="/게시글조회?post_id={{ post.id }}" style="text-decoration: none; color: inherit;">
<div class="review">
<h2>{{ post.movie_title }}</h2>
<p><strong>작성자:</strong> {{ post.username }}</p>
<p><strong>평점:</strong> {{ post.grade }}/5.0</p>
<p><strong>리뷰 내용:</strong> {{ post.review }}</p>
</div>
</a>
{% endfor %}
</div>
<a href="/" class="scroll-to-top" style="text-decoration: none; color: #ddd;">home</a>
<footer>
<div class="container">
<form method="POST">
<div class="search-container">
<select class="search-select" name="tag">
<option value="posting_title">제목</option>
<option value="username">작성자</option>
<option value="review">내용</option>
<option value="movie_title">영화 이름</option>
</select>
<input type="text" name="find" class="search-box" placeholder="검색어를 입력하세요..." required>
<button type="submit" class="search-button">검색</button>
</div>
</form>
<div class="pagination">
<a href="#" class="active">1</a>
<a href="#">2</a>
<a href="#">3</a>
<a href="#">다음</a>
</div>
<p>© 2024 게시글 조회 페이지</p>
</div>
</footer>
//게시글 조회
<div class="container">
<div class="post">
<h2>{{ posts.movie_title }}
<div class="edit-buttons">
<button>수정</button>
<button>삭제</button>
</div>
</h2>
<p><strong>작성자:</strong> {{ posts.username }}</p>
<p><strong>제목:</strong> {{ posts.posting_title }}</p>
<p> {{ posts.review }}</p>
</div>
{% if comments %}
{% for comment in comments %}
<div class="comments">
<h3>{{ comment.user_id }}</h3>
<div class="comment">
<p>{{ comment.detail }}</p>
<p>{{ comment.date.strftime("%Y-%m-%d %H:%M:%S") }}</p>
<div class="comment-buttons">
<button>수정</button>
<button>삭제</button>
</div>
</div>
</div>
{% endfor %}
{% endif %}
<div class="comment-form">
<h3>댓글 작성</h3>
<form method="POST">
<textarea name="detail" rows="4" cols="50" placeholder="댓글을 작성하세요..."></textarea><br>
<button type="submit">댓글 작성</button>
</form>
</div>
</div>
// 게시글 작성
<div class="container">
<form action="/게시글작성" method="POST">
<div>
<label for="author">작성자:</label>
<input type="text" id="author" name="username" required>
</div>
<div>
<label for="movie">영화 이름:</label>
<input type="text" id="movie" name="movie_title" required>
</div>
<div>
<label for="title">제목:</label>
<input type="text" id="title" name="posting_title" required>
</div>
<div>
<label for="content">내용:</label>
<textarea id="content" name="review" required></textarea>
</div>
<button type="submit">작성 완료</button>
</form>
</div>
팀원분과의 작업을 합치고 나서 나온 결과로
영화 api를 가져와서 반영하고 보여주는 기능을 넣었습니다 짞짝짝
'프로젝트 과제' 카테고리의 다른 글
영화 리뷰 게시판 만들기 - 팀 프로젝트 4일차 (0) | 2024.04.04 |
---|---|
영화 리뷰 게시판 만들기 - 팀 프로젝트 3일차 (0) | 2024.04.03 |
영화 리뷰 게시판 만들기 - 팀 프로젝트 1일차 (1) | 2024.04.01 |
(개인 과제) 가위 바위 보 게임 웹으로 만들기! (0) | 2024.02.26 |
(개인 과제) 클래스 사용해보기! (1) | 2024.02.23 |