[해설 2]에 이어지는 글입니다.
✨해설 2 보러가기
💡 9 ~ 12 [해설3] : 백_윤소민
회원가입, 아이디 중복확인, 닉네임 중복확인, 로그인 및 로그아웃, 상품 구매시 포인트, 랭킹포인트 증감 기능, 사용자 포인트별 랭킹 정렬 기능
[app.py]
@application.route("/signup_post",methods=['POST'])
def register_user():
data=request.form
id=request.form['id']
pw=request.form['pw']
pw2=request.form['PWconfirm']
nname=request.form['nickname']
pw_hash=hashlib.sha256(pw.encode('utf-8')).hexdigest()
pw_hash2=hashlib.sha3_256(pw.encode('utf-8')).hexdigest()
session['id_'] = id
session['pw']=pw
session['pw2']=pw2
session['nickname']=nname
session['email']=request.form['email']
session['HP']=request.form['HP']
session['college']=request.form['dropdown1']
session['major']=request.form['dropdown2']
return render_template("8~10/signup.html",
id=session.get('id_', ''),pw=session.get('pw',''),nickname=session.get('nickname',''),hp=session.get('HP',''),pw2=session.get('pw2',''),
email=session.get('email',''),college=session.get('college',''),major=session.get('major',''))
[app.py]
#아이디중복확인
if 'check_duplicate_id' in request.form:
if DB.id_duplicate_check(id):
flash('사용할 수 있는 아이디입니다.')
return render_template("8~10/signup.html",
id=session.get('id_', ''),pw=session.get('pw',''),nickname=session.get('nickname',''),hp=session.get('HP',''),pw2=session.get('pw2',''),
email=session.get('email',''),college=session.get('college',''),major=session.get('major',''))
else:
flash('이미 존재하는 아이디입니다.')
return render_template("8~10/signup.html",
id=session.get('id_', ''),pw=session.get('pw',''),nickname=session.get('nickname',''),hp=session.get('HP',''),pw2=session.get('pw2',''),
email=session.get('email',''),college=session.get('college',''),major=session.get('major',''))
[signup.html]
{% extends "index.html" %}
{% block section %}
{% with mesg = get_flashed_messages() %}
{% if mesg !=[]%}
<script>alert("{{ mesg[0] }}")</script>
{% endif %}
{% endwith %}
[database.py]
# 회원가입 시 아이디 중복확인
def id_duplicate_check(self, id_string):
users = self.db.child("user").get()
print("users###",users.val())
if str(users.val()) == "None": # first registration
return True
else:
for res in users.each():
value = res.val()
if value['id'] == id_string:
return False
return True
[app.py]
#구매하기 버튼 누르면
@application.route("/1~4/order_item/<item_name>/")
def view_order_confirmation(item_name):
point=DB.get_price(str(item_name))
seller=DB.get_seller(str(item_name))
… 추가 코드 …
DB.update_point(session['id'], point) #구매자 포인트 감소
DB.update_ranking_point(session['id'], point) #구매자 랭킹 포인트 증가
DB.update_point_2(seller,point) #판매자 포인트 증가
DB.update_ranking_point(seller,point) #판매자 랭킹 포인트 증가
flash('포인트가 차감되었습니다')
data=DB.get_item_byname(str(item_name))
session['user_point'] = DB.get_user_point(session['id'])
return render_template("1~4/order_item.html", data=data, item_name=item_name, seller_email=seller_email, download_count=download_count)
[database.py]
#구매하기
#가격 가져오기
def get_price(self, item_name):
data = self.db.child("item").child(item_name).get().val()
point=int(self.db.child("item").child(item_name).get().val()['price'])
return point
#판매자 가져오기
def get_seller(self, name):
seller=self.db.child("item").child(name).get().val()['writer']
#구매자 포인트 감소
def update_point(self, user_id, point):
user_data = self.db.child("user").child(user_id).get().val()
if user_data is not None and 'point' in user_data:
b_point = int(user_data['point'])
a_point = b_point - point
point_info = {
"point": a_point
}
self.db.child("user").child(user_id).update(point_info)
return True
#판매자 포인트 증가
def update_point_2(self, user_id, point):
user_data = self.db.child("user").child(user_id).get().val()
if user_data is not None and 'point' in user_data:
b_point = int(user_data['point'])
a_point = b_point + point
point_info = {
"point": a_point
}
self.db.child("user").child(user_id).update(point_info)
return True
#사용자 포인트 가져오기
def get_user_point(self, name):
point=int(self.db.child("user").child(name).get().val()['point'])
return point
: 사용자의 랭킹 포인트를 가져와서 랭킹 포인트가 큰 순서대로 정렬한다.
[app.py]
#랭킹
@application.route("/ranking")
def ranking():
page = request.args.get("page", 0, type=int)
per_page=int(10)
per_row=int (1)
college = request.args.get("category", "all")
row_count=int(per_page/per_row)
start_idx=per_page*page
end_idx=per_page*(page+1)
if college=="all":
data = DB.get_users() #전체상품조회 그대로
else:
data = DB.get_items_bycollege(college)
data = dict(sorted(data.items(), key=lambda x: x[1]['rankingpoint'], reverse=True))
item_counts = len(data)
if item_counts<=per_page:
data = dict(list(data.items())[:item_counts])
else:
data = dict(list(data.items())[start_idx:end_idx])
tot_count = len(data)
for i in range(row_count):
if (i == row_count-1) and (tot_count%per_row != 0):
locals()['data_{}'.format(i)] = dict(list(data.items())[i*per_row:])
else:
locals()['data_{}'.format(i)] = dict(list(data.items())[i*per_row:(i+1)*per_row])
if 'id' in session:
user_id = session['id']
user_ranking_point=DB.get_user_ranking_point(user_id)
else:
user_ranking_point=0