This repository has been archived by the owner on Aug 5, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
app.py
237 lines (204 loc) · 7.49 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
from flask import Flask, redirect, render_template, request, jsonify, url_for
# Provider : 특정 기능을 공급하는 함수들
from database import getUser, getSelect, getCapsule
from src.modules.provider.form_provider import getSuccessForm, getFailureForm
from src.modules.config.config_provider import PORT, TOKEN_SECRET, TOKEN_ALGORITHM
# Validator : 특정 값의 유효성을 테스트하는 함수들
from src.modules.vadliator.form_validator import validate_name, validate_password
# Tokenizer : 토큰을 생성하는 함수
from src.modules.auth.tokenizer import getToken
# from src.modules.auth.bcrypt import compareHashPw, getBcrypt, getHashPw
app = Flask(__name__)
# bcrypt = getBcrypt(app)
@app.route("/")
def main():
img = 'https://www.nespresso.com/shared_res/mos/free_html/kr/images/Voltesso-Mobile.jpg'
return render_template("/pages/index.html", img=img)
@app.route('/join', methods=['GET'])
def join():
return render_template('./pages/join.html', title='캡슐커피 취향저격')
@app.route('/login', methods=['GET'])
def login():
name = request.args.get('name')
if name is not None:
return render_template('./pages/login.html', name=name, title='캡슐커피 취향 저격')
else:
return render_template('./pages/login.html', title='캡슐커피 취향저격')
@app.route('/login/guest', methods=['GET'])
def login_as_guest():
return redirect(url_for('select'));
# 선택창 이름 불러오기
@app.route('/nespresso', methods=['GET'])
def show_nespresso():
name = request.args.get('name')
return render_template('./pages/select.html', title='캡슐커피 취향저격', name=name)
# 선택창 select에 임시저장
@app.route('/nespresso', methods=['POST'])
def save_nespresso():
name=request.form['name']
doc = {
'user_name': name,
'cake':int( request.form['cake_give']),
'apple': int(request.form['apple_give']),
'strength': int(request.form['strength_give']),
'milk': int(request.form['milk_give']),
'size': int(request.form['size_give'])
}
if getSelect().find_one({'user_name': name}) is not None:
getSelect().delete_one({'user_name': name})
getSelect().insert_one(doc)
else:
getSelect().insert_one(doc)
return jsonify({'msg': '선택 완료!'})
# 결과창
@app.route('/result', methods=["GET"])
def result_list():
user_name = request.args.get('name')
doc = getSelect().find_one({'user_name': user_name})
print(doc)
root1=list(getCapsule().find({},{"_id":False}))
if doc['strength'] == 1:
count=0
while True:
for i in root1:
if i['tasty']['strong']<=7:
count+=1
root1.remove(i)
if count==0:
break
count=0
else:
count = 0
while True:
for i in root1:
if i['tasty']['strong'] > 7:
count += 1
root1.remove(i)
if count == 0:
break
count = 0
if doc['milk'] == 0:
count = 0
while True:
for i in root1:
if i['tasty']['bitter'] >2:
count += 1
root1.remove(i)
if count == 0:
break
count = 0
else:
count = 0
while True:
for i in root1:
if i['tasty']['bitter'] <= 2:
count += 1
root1.remove(i)
if count == 0:
break
count = 0
return render_template('/pages/result.html',list=root1, title='캡슐커피 취향저격', user_name=user_name)
@app.route('/api/result', methods=["POST"])
def saver_cof():
cof_name = request.form['cof_name']
user_name = request.form['user_name']
print(cof_name, user_name)
getSelect().delete_one({'user_name': user_name})
doc={
'user_name': user_name,
'cof_name': cof_name
}
getSelect().insert_one(doc)
return jsonify(
getSuccessForm('기록성공', {
'name': user_name,
'cof_name': cof_name,
})
)
@app.route('/api/join', methods=['POST'])
def api_join():
name = validate_name(request.form['name'])
password = validate_password(request.form['password'])
if name is None or password is None:
return jsonify(
getFailureForm('텅빈 이름/비밀번호를 전달 받았습니다.', {
'name': name,
'password': password
})
)
# 중복 검사
find = getUser().find_one({
'name': name
})
if find is not None:
# 이미 중복된 사용자가 존재하는 경우, -> 회원가입 실패
return jsonify(
getFailureForm('이미 중복된 사용자가 존재합니다.')
);
else:
# 이미 중복된 사용자가 없는 경우 -> 회원가입 실행
insert = getUser().insert_one({
'name': name,
'password': password
# 'password': getHashPw(bcrypt, password)
})
# 이미 중복된 사용자가 없는 경우 -> 회원가입 성공
return jsonify(
getSuccessForm('회원가입에 성공하셨습니다.', {
'name': name,
'password': '비공개'
})
);
@app.route('/api/login', methods=['POST'])
def api_login():
name = validate_name(request.form['name'])
password = validate_password(request.form['password'])
if name is None or password is None:
return jsonify(
getFailureForm('유효하지 않는 가입을 전달 받았습니다.')
)
is_exists = getUser().find_one({
'name': name
})
if is_exists is None:
return jsonify(getFailureForm('존재하지 않는 이름을 전달 받았습니다.'))
# compared = compareHashPw(
# bcrypt,
# is_exists['password'],
# password
# )
if is_exists['password'] == password is False:
return jsonify(getFailureForm('일치하지 않는 비밀번호를 전달 받았습니다.'))
else:
token = getToken({ 'name': name }, TOKEN_SECRET, TOKEN_ALGORITHM )
return jsonify(
getSuccessForm('로그인에 성공하셨습니다.', {
'name': name,
'password': '비공개',
'accessToken': token
})
)
@app.route('/api/get_reviews', methods=['GET'])
def get_reviews():
review_receive = request.args.get("review_give")
result = list(db.reviews.find({"review": review_receive}, {'_id': 0}))
return jsonify({'result': 'success', 'reviews': result})
@app.route('/api/save_review', methods=['POST'])
def save_review():
review_receive = request.form['review_give']
doc = {"review": review_receive}
getSelect().reviews.insert_one(doc)
return jsonify({'result': 'success', 'msg': f'review"{review_receive}" saved'})
@app.route('/api/delete_review', methods=['POST'])
def delete_review():
review_receive = request.form['review_give']
number_receive = int(request.form["number_give"])
review = list(getSelect().reviews.find({"review": review_receive}))[number_receive]["review"]
print(review_receive, review)
getSelect().reviews.delete_one({"review": review})
return jsonify({'result': 'success', 'msg': f'review #{number_receive} of "{review_receive}" deleted'})
if __name__ == '__main__':
app.run(
'0.0.0.0',
port=PORT,
debug=True)