[๋๋ง์ ๋จ์ด์ฅ] 7. ์์ธํ์ด์ง - ์ ์ฅ & ์ญ์ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
1. ์ ๋จ์ด / ๊ธฐ์กด ๋จ์ด ๊ตฌ๋ถ
โ url ์์
localhost:5000/detail/hello?status_give=new ⇒ ๐พ ๋ฒํผ
localhost:5000/detail/hello?status_give=old ⇒ ๐๏ธ๋ฒํผ
status_receive = request.args.get("status_give", "new")
# status_give ๋ผ๋ ํ๋ผ๋ฏธํฐ๋ฅผ status_receive ๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐ์
# status_give ๋ผ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฃผ์ง ์์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด, ๊ธฐ๋ณธ๊ฐ์ "new"๋ก ์ฃผ๋๋ก ํจ.
return render_template("detail.html", word=keyword, result=result, status=status_receive)
# detail.html์ status ๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ณด๋
@app.route('/detail/')
def detail(keyword):
# API์์ ๋จ์ด ๋ป ์ฐพ์์ ๊ฒฐ๊ณผ ๋ณด๋ด๊ธฐ
status_receive = request.args.get("status_give", "new")
r = requests.get(f"<https://owlbot.info/api/v4/dictionary/{keyword}>",
headers={"Authorization": "Token [๋ด ํ ํฐ]"})
result = r.json()
print(result)
return render_template("detail.html", word=keyword, result=result, status=status_receive)
{% if status=="new" %} <!--status๊ฐ "new"์ด๋ฉด ์ ์ฅ ๋ฒํผ, ํด๋ฆญํ๋ฉด save_word() ํจ์ ํธ์ถ-->
<button id="btn-save" class="btn btn-outline-sparta btn-lg" onclick="save_word()">
<i class="fa fa-floppy-o"></i>
</button>
{% else %} <!--์๋๋ฉด ์ญ์ ๋ฒํผ, ํด๋ฆญํ๋ฉด delete_word() ํจ์ ํธ์ถ-->
<button id="btn-delete" class="btn btn-sparta btn-lg" onclick="delete_word()">
<i class="fa fa-trash-o"></i>
</button>
{% endif %}
2. ์ ์ฅ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
โ ์๋ฒ - ๋จ์ด ์ ์ฅ API
๋ชฉ๋ก ํ์ด์ง์์๋ ๋จ์ด ๋น ๋ป์ ํ๋๋ง ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์
๋จ์ด์ ์ฒซ ๋ฒ์งธ ์ ์๋ง POST ์์ฒญ์ผ๋ก ๋ณด๋ด๊ณ ,
์๋ฒ์์ ๋จ์ด์ ๋ป์ ๋ฐ์ words ์ปฌ๋ ์ ์ ์ ์ฅ.
@app.route('/api/save_word', methods=['POST'])
def save_word(): # ๋จ์ด ์ ์ฅ ํจ์
word_receive = request.form['word_give']
# ๋ฐ์ ๋จ์ด๋ฅผ ์ ์ฅํ ๋ณ์ word_receive์ request์ form์ word_give๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ณด๋
# ์ฆ, word_give๋ก ํด๋ผ์ด์ธํธ์์ ๋ณด๋ด์ค ๋ฐ์ดํฐ๋ฅผ word_receive๋ก ๋ฐ์
definition_receive = request.form['definition_give']
# ๋ฐ์ ๋ป์ ์ ์ฅํ ๋ณ์ definition_receive์ request์ form์ definition_give๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ณด๋
# ์ฆ, definition_give๋ก ํด๋ผ์ด์ธํธ์์ ๋ณด๋ด์ค ๋ฐ์ดํฐ๋ฅผ definition_receive๋ก ๋ฐ์
doc = {"word": word_receive, "definition": definition_receive}
db.words.insert_one(doc)
# db.์ปฌ๋ ์
์ด๋ฆ.doc์ด๋ผ๋ ๋ํ๋จผํธ ํ๋๋ฅผ ๋ณด๋
return jsonify({'result': 'success', 'msg': f'word "{word_receive}" saved'})
โ ํด๋ผ์ด์ธํธ - ๋จ์ด ์ ์ฅ ์์ฒญ์ ๋ณด๋ผ ํจ์
ํด๋ผ์ด์ธํธ์์๋ save_word API๋ก POST์์ฒญ์ ๋ณด๋ด๋๋ฐ,
ํ์ํ ๋ฐ์ดํฐ(word_give, definition_give)๋ค์ ๋ณด๋ด์
๋จ์ด ์ ์ฅ์ฃ ์ฑ๊ณต์ ํ๋ฉด ๋ฉ์์ง๋ฅผ alert๋ก ๋์ฐ๊ณ ,
delete ๋ฒํผ์ด ์๋ status_give๊ฐ old์ธ ํ์ด์ง๋ก ๋ณ๊ฒฝ.
function save_word() {
$.ajax({
type: "POST",
url: `/api/save_word`,
data: {
word_give: "{{ word }}",
definition_give: "{{ result.definitions[0].definition }}"
},
success: function (response) {
alert(response["msg"])
window.location.href = "/detail/{{ word }}?status_give=old"
}
});
}
3. ์ญ์ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
โ ์๋ฒ - ๋จ์ด ์ญ์ API
๋จ์ด๋ฅผ ์ญ์ ํ ๋๋ ๋จ์ด๋ง ์์ผ๋ฉด ๋๋ฏ๋ก POST ์์ฒญ์ผ๋ก ๋จ์ด๋ฅผ ๋ณด๋ด์ฃผ๊ณ ,
์๋ฒ์์๋ ํด๋น ๋จ์ด๋ฅผ ์ฐพ์ ์ญ์ ํด์ค.
@app.route('/api/delete_word', methods=['POST'])
def delete_word(): # ๋จ์ด ์ญ์ ํจ์
word_receive = request.form['word_give']
# word_receive๋ก ํด๋ผ์ด์ธํธ์์ ๋ณด๋ด์ค ๋ฐ์ดํฐ๋ฅผ word_give๋ก ๋ฐ์
db.words.delete_one({"word": word_receive})
#db์ words์์ word_receive์ ํด๋นํ๋ word ํ๋๋ฅผ ์ง์
db.examples.delete_many({"word": word_receive})
return jsonify({'result': 'success', 'msg': f'word "{word_receive}" deleted'})
โ ํด๋ผ์ด์ธํธ - ๋จ์ด ์ญ์ ์์ฒญ์ ๋ณด๋ผ ํจ์
delete_word API๋ก POST์์ฒญ์ ๋ณด๋ด๋๋ฐ, ํ์ํ ๋ฐ์ดํฐ(word)๋ค์ ๋ณด๋.
๋จ์ด ์ญ์ ์ ์ฑ๊ณตํ๋ฉด ๋์ด์ ๋ณด์ฌ์ค ์ ๋ณด๊ฐ ์์ผ๋ฏ๋ก
๋ฉ์์ง๋ฅผ alert๋ก ๋์ฐ๊ณ , ๋ฉ์ธ ํ์ด์ง๋ก ์ด๋
function delete_word() {
$.ajax({
type: "POST",
url: `/api/delete_word`,
data: {
word_give: "{{ word }}
},
success: function (response) {
alert(response["msg"])
window.location.href = "/"
}
});
}