이번 글에서는 카테고리 페이지를 렌더링하는 부분와 특정 아이템의 상세 페이지를 렌더링하는 부분 설명하도록 하겠다.
<category 라우트 함수>
@bp.route('/category/<category>', methods=['GET', 'POST'])
def category(category):
if request.method == 'POST':
search_term = request.form.get('search_term')
items = Item_data.query.filter(
func.lower(Item_data.name).ilike(f'%{search_term.lower()}%')
).all()
else:
items = Item_data.query.filter_by(category=category).all()
search_term = None
return render_template('category.html', category=category, items=items, search_term=search_term)
- category 라우트 함수는 카테고리 페이지를 렌더링한다.
- category 라우트는 카테고리 이름을 동적으로 받아온다.
- 요청이 POST일 경우, 검색어(search_term)를 받아와 해당하는 아이템들을 검색한다.
- 요청이 GET일 경우, 해당 카테고리에 속하는 모든 아이템을 가져온다.
- 검색 결과나 카테고리에 속하는 아이템들을 템플릿('category.html')에 전달하여 렌더링한다.
<item_detail 라우트 함수>
@bp.route('/category/<category>/<int:item_id>')
def item_detail(category, item_id):
item = Item_data.query.get_or_404(item_id)
return render_template('item_detail.html', item=item)
- item_detail 라우트 함수는 특정 아이템의 상세 페이지를 렌더링합니다.
- URL에 포함된 카테고리 이름과 아이템 ID를 받아와 해당하는 아이템을 데이터베이스에서 찾습니다.
- 만약 해당 아이템이 존재하지 않으면 404 에러를 반환합니다.
- 찾은 아이템을 템플릿('item_detail.html')에 전달하여 렌더링합니다.
이로써 기본적인 기능 구현이 모두 완료되었다.
추가적으로 사용자 간의 채팅기능, 직거리 위치 지정 기능 등 을 제작 하고 싶었으나
팀원들의 기량 부족과 시간 부족으로 아쉽게 포기한 기능들이 굉장이 많다.
그럼에도 다들 열심히 했고 기본적인 기능이라도 작동하게 되었으니 꽤나 만족하는 프로젝트였다.