Self Code Review/(sparta) WEB plus - 나만의 단어장
[나만의 단어장] 12. 숙제 - 예문 저장 & 삭제 기능 만들기
밍굥잉
2022. 5. 4. 15:19
- “status_give = old” 일 때만 예문 작성 칸 띄우기
- input 박스에 입력된 예문이 해당 단어를 포함하고 있는지 확인
- 있으면 DB의 examples 컬렉션에 예문 저장.
- 예문들 중에서 해당 단어에 관한 것만 찾아와서 보여주는 함수를 만들어
- 페이지 로딩 시, 새 예문 저장 시, 기존 예문 삭제 시 함수 실행.
- 예문 삭제 시 여러 예문 중 어떤 것인지 구분을 하기 위해 각 줄에 id 부여
- 단어 삭제 시 해당 예문들도 같이 지워줌.
{% if status=="old" %} <!-- status가 old이면 -->
<div id="examples" class="container"> // <!-- 예문 div 표현 -->
<h3 style="text-align: center;margin-bottom:1rem">Write your own sentences!</h3>
<ul id="example-list">
<li id="ex-0">This sentence contains the word 'word'. <a
href="javascript:delete_ex(0)">delete</a></li>
<li id="ex-1">I don't like using the MS Word program. <a
href="javascript:delete_ex(1)">delete</a></li>
</ul>
<div class="d-flex justify-content-between" style="margin-left:20px;">
<input id="new-example" class="form-control form-control-sm" style="margin-right: 0.5rem">
<button class="btn btn-outline-secondary btn-sm" onclick="add_ex()">add</button> <!-- add 버튼 클릭하면 add_ex() 함수 호출 -->
</div>
</div>
{% endif %}
@app.route('/api/get_examples', methods=['GET'])
def get_exs():
#예문 가져오기
word_receive = request.args.get("word_give")
result = list(db.examples.find({"word": word_receive}, {'_id': 0}))
print(word_receive, len(result))
return jsonify({'result': 'success', 'examples': result})
@app.route('/api/save_ex', methods=['POST'])
def save_ex():
#예문 저장하기
word_receive = request.form['word_give'] #word_receive 라는 이름으로 word_give를 받음
example_receive = request.form['example_give'] #example_receive 라는 이름으로 example_give를 받음
doc = {"word": word_receive, "example": example_receive} #도큐먼트에 저장
db.examples.insert_one(doc) #도큐먼트를 db의 examples 컬렉션에 저장
return jsonify({'result': 'success', 'msg': f'example "{example_receive}" saved'})
@app.route('/api/delete_ex', methods=['POST'])
def delete_ex():
#예문 삭제하기
word_receive = request.form['word_give'] #word_recive 라는 이름으로 word_give를 받음
number_receive = int(request.form["number_give"]) #number_receive 라는 이름으로 number_give를 정수형으로 받음
example = list(db.examples.find({"word": word_receive}))[number_receive]["example"]
#example은 db의 examples 컬렉션에서 word에 해당하는 예문 리스트 중 number_receive 번째 example 문장.
print(word_receive, example)
db.examples.delete_one({"word": word_receive, "example": example})
return jsonify({'result': 'success', 'msg': f'example #{number_receive} of "{word_receive}" deleted'})
function get_examples() {
$("#example-list").empty()
$.ajax({
type: "GET",
url: `/api/get_examples?word_give=${word}`,
data: {},
success: function (response) {
let examples = response["examples"];
for (let i = 0; i < examples.length; i++) {
let example = examples[i]["example"];
console.log(example)
let html_temp = `<li id="ex-${i}">${example} <a
href="javascript:delete_ex(${i})">delete</a></li>`
$("#example-list").append(html_temp)
}
}
});
}
function add_ex() { //단어를 저장하는 add_ex 함수
let new_ex = $('#new-example').val(); //new_ex라고 new-example input 박스 선언
if (!new_ex.toLowerCase().includes(word.toLowerCase())) { //만약 소문자로 이루어진 new_ex값이 소문자로만 이루어진 word 단어를 포함하지 않으면
alert(`the word '${word}' is not included.`); // 예문에 단어를 포함시켜달라는 alret 띄우기
return; //리턴하여 멈추기
}
console.log(new_ex)
$.ajax({
type: "POST",
url: `/api/save_ex`,
data: {
word_give: word,
example_give: new_ex
}, // 단어와 예문 주기
success: function (response) { //성공하면
get_examples(); //get_examples 함수를 호출해서 예문을 가져오고
$('#new-example').val(""); //new-example input 박스는 비워줌.
}
});
}
function delete_ex(i) {
console.log("deleting", i)
$.ajax({
type: "POST",
url: `/api/delete_ex`,
data: {
word_give: word,
number_give: i
},
success: function (response) {
get_examples()
}
});
}
//status가 old일 경우에만 예문들을 가져와서 보여줌
$(document).ready(function () {
{% if status=="old" %}
get_examples()
{% endif %}