[해설 1]에 이어지는 글입니다.
✨해설 1 보러가기
💡 7 ~ 8 [해설2] : 백_황혜진
리뷰 작성, 등록한 리뷰 조회, 상품별 리뷰 조회 화면, 리뷰 상세보기 화면, 회원별 마이페이지 구현
[app.py]
# 5~7
# 리뷰작성 -> 구매내역페이지
@application.route("/5~7/reg_reviews")
def view_reg_review():
if 'id' not in session or not session['id']:
flash('리뷰를 작성하려면 로그인을 해주세요.')
return redirect(url_for('login'))
else:
#return render_template("5~7/reg_reviews.html")
page = request.args.get("page", 0, type=int)
per_page=6
per_row=1
row_count=int(per_page)
start_idx=per_page*page
end_idx=per_page*(page+1)
user_id = session.get('id')
purchase = DB.get_purchase(user_id) #구매내역 불러오기
if purchase == None: #구매내역
none = "Y"
return render_template("/5~7/mypage.html",none=none)
else:
none = "N"
item_counts = len(purchase)
purchase = dict(list(purchase.items())[start_idx:end_idx])
tot_count = len(purchase)
for i in range(row_count):
if (i == row_count-1):
locals()['data_{}'.format(i)] = dict(list(purchase.items())[i*per_row:])
else:
locals()['data_{}'.format(i)] = dict(list(purchase.items())[i*per_row:(i+1)*per_row])
return render_template("/5~7/mypage.html",none=none, purchase=purchase.items(), row1=locals()['data_0'].items(), row2=locals()['data_1'].items(),
row3=locals()['data_2'].items(), row4=locals()['data_3'].items(),row5=locals()['data_4'].items(), row6=locals()['data_5'].items(),
limit=per_page, page=page, page_count=int((item_counts/per_page)+1), total=item_counts)
if 'id' not in session or not session['id']:
flash('리뷰를 작성하려면 로그인을 해주세요.')
return redirect(url_for('login'))
else:
user_id = session.get('id')
purchase = DB.get_purchase(user_id) #구매내역 불러오기
if purchase == None: #구매내역
none = "Y"
return render_template("/5~7/mypage.html",none=none)
else:
none = "N"
item_counts = len(purchase)
purchase = dict(list(purchase.items())[start_idx:end_idx])
tot_count = len(purchase)
for i in range(row_count):
if (i == row_count-1):
locals()['data_{}'.format(i)] = dict(list(purchase.items())[i*per_row:])
else:
locals()['data_{}'.format(i)] = dict(list(purchase.items())[i*per_row:(i+1)*per_row])
return render_template("/5~7/mypage.html",none=none, purchase=purchase.items(), row1=locals()['data_0'].items(), row2=locals()['data_1'].items(),
row3=locals()['data_2'].items(), row4=locals()['data_3'].items(),row5=locals()['data_4'].items(), row6=locals()['data_5'].items(),
limit=per_page, page=page, page_count=int((item_counts/per_page)+1), total=item_counts)
따라서, 구매내역이 없을 때(purchase = none) purchase.items()에서 오류가 발생하기 때문에 구매내역이 none일때와 아닐 때 두 경우로 나눠서 접근함
[database.py]
def get_purchase(self, user_id):
purchase = self.db.child("user_purchase_history").get().val()
for id, purchase_items in purchase.items(): #각 내역에 대해 반복
if id == user_id: #key값이 사용자 id와 같으면 그 구매내역 반환
return purchase_items
return None
[app.py]
Tip : 동적라우팅 사용하여 상품이름으로 라우팅
동적라우팅(Dynamic Routing): 라우팅이 사용자의 요청이나 다른 동적인 조건에 따라 동적으로 결정되는 프로세스. URL 경로의 일부가 고정되어 있지 않고 가변적인 경우에 적용.
@application.route("/reg_review_init/<name>/")
def reg_review_init(name):
if 'id' not in session or not session['id']:
flash('리뷰를 작성하려면 로그인을 해주세요.')
return redirect(url_for('login'))
else:
info = DB.get_item_byname(name)
item_name = info.get("item_name",None)
professor = info.get("professor",None)
subject = info.get("course_number",None)
writer = info.get("writer",None)
reviewer = session['id']
return render_template("5~7/reg_reviews.html", writer=writer, item_name = item_name, reviewer=reviewer, professor=professor,subject=subject)
[database.py]
def get_item_byname(self, name):
items = self.db.child("item").get()
target_value=""
print("#############", name)
for res in items.each():
key_value = res.key()
if key_value == name:
target_value=res.val()
return target_value