2023.05.17 / 내일배움캠프[Node.js] - 3일차

댓글 삭제 기능 하는법 익히기.

 

app.py

 

from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
from pymongo import MongoClient

client = MongoClient('mongodb+srv://sparta:test@cluster0.9rhu9tr.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta


# 1~9까지의 숫자를 8자로 랜덤으로 돌리고 중복되지 않게 뽑고 변수 num에 넣음
import string, random
length = 8
string_pool =  string.digits
num = ""
for i in range(length) :
    num += random.choice(string_pool)

@app.route('/')
def home():
    return render_template('index.html')
# POST
@app.route("/list", methods=["POST"])
def list_post():
    # db 로 입력 값 보내기 요청 에서 name_give를 받아와 변수 name_receive에 넣음
    name_receive = request.form.get('name_give',False)

    # name 은 name_receive, _id 값은 num의 형태로 doc에 저장
    doc = {
        'name':name_receive,
        '_id':num
    }
    db.names.insert_one(doc)

    return jsonify({'msg': '등록 완료!'})

# 보여주기
@app.route("/list", methods=["GET"])
def list_get():
    # list = 배열로 받아옴 , db.names.find({}) db.names의 모든 값을 find , (_id값을 임의로 정했기 때문에 {'_id': False}는 필요하지않음.)
    name_list = list(db.names.find({}))    

    #      db.names.find({},{'_id': False}) = names의 모든 값을 find 하지만 _id 값은 제외한다.({'_id': False})  true로 하면 포함.          

    return jsonify({'names': name_list}) # names = key 값 , name_list를 key값에 넣어줌.

# 삭제
@app.route("/list/delete", methods=["POST"])
def list_delete():
    # delete_list(id) 에서 id라는 변수를 num_give라는 변수로 보냄 >> 받은 num_give를 num_receive라는 변수에 넣어줌
    num_receive = request.form['num_give']
    db.names.delete_one({'_id': num_receive})

    return jsonify({'msg': '삭제 완료!'})

if __name__ == '__main__':
    app.run('0.0.0.0', port=5000, debug=True)

 

index.html

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
          integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
            integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
            crossorigin="anonymous"></script>
</head>
<script>
    $(document).ready(function () {
        show_list();
    });
    // db 로 입력 값 보내기 요청
    function add_list() {
        let name = $('#name').val()
        $.ajax({
            type: "POST",
            url: "/list",
            data: {name_give:name},
            success: function (response) {
                alert(response["msg"])
                window.location.reload()
            }
        });
    }
    function show_list() {
        $.ajax({
            type: "GET",
            url: "/list",
            data: {},
            success: function (response) {
                // app.py #보여주기의 key 값인 names 를 함수 변수 response에 넣어주고 rows에 넣어줌
                let rows = response['names']
                $('#names').empty()
                // i를 0으로 지정 rows.length = rows 의 길이만큼돌리고, i++ = i에 1추가, for = 이걸 반복
                for(let i = 0; i < rows.length; i++) {
                    let name = rows[i]['name']
                    let id = rows[i]['_id']
                    // console.log(rows)
                    // ${name} = rows[i]['name'] , ${id} = rows[i]['_id']
                    let temp_html = `<li>${name}<button onclick="delete_list(${id})">삭제</button></li>`
                    $('#names').append(temp_html)
                }
            }
        });
    }
    // function ~~~(@@) {  =  @@은 매개변수로 해당 함수에서만 쓸수있는 변수.
    function delete_list(id) {
        $.ajax({
            type: "POST",
            url: "/list/delete",
            data: {num_give:id},  // id라는 매개변수를 num_give라는 변수에 넣어줌 , num_give 는 다른곳에서 사용 가능.
            success: function (response) {  // 성공하면 response에 넣어줌.
                alert(response["msg"])
                window.location.reload()
            }
        });
    }
</script>
<body>
<input id="name" type="text" placeholder="이름을 입력해보세요">
<button onclick="add_list()">입력</button>
<ul id="names">
</ul>
</body>
</html>
각 코드의 설명들은 주석으로 처리해놨다.

해당 기능을 알기 위해 인터넷 서칭도 하고 혼자 알아 볼려했지만..

도저히 불가능하여 같은 팀원분께 도움을 요청해 성공했다!

팀원분 사랑해요 ㅠ.ㅠ

* 갑자기 든 생각인데 이렇게 id에 임의로 생성한 값을 넣어주면 동일한 값이 생성되어 저장시 오류가 발생할 수 있다.

  그래서 나의 얄팍한 코딩 지식으로 db의 저장된 id값을 get요청해 if 문이나 while 문을 써서 비교를 해주고 동일 할 경우      함수 처음부분으로 돌아가 새로 id값을 생성해주면 된다 생각했다!

 

  문법에 익숙하지않고 제대로 공부를 하지않아 팀원분께 도움을 요청하였는데 비교를 해서 값을 새로 생성하는 부분은

  문제가 없지만 db에 데이터가 많이 쌓일 경우 하나하나 다 비교해줘야해서 오히려 비효율적이라는 답변..!

  그래서 그냥 해결책으로 값의 자릿수를 늘리는 방법을 택했다.

 

* 원래 원하는 방법은 db안에 자동적으로 생성되는 id값을 불러와서 그걸 이용한 delete 방법을 구현할려 했지만 해당 id값이 고유의 값이라 그런지 쉽지 않아 이 방법을 포기하였다..

하지만 분명 고유 id값을 수정하지 않고 하는 방법도 있기 때문에 추후에 혼자 찾아 보고 적용 시켜 볼거다.!

'긁적..' 카테고리의 다른 글

상세페이지 연결 localStorage / setTime, getTime  (0) 2023.06.05
[1] Team.NIVEA 회고  (1) 2023.05.19
for반복문 증감식  (0) 2023.05.19
동기 와 비동기  (0) 2023.05.19
슬라이드 기능 (원하는 기능 구현못함..)  (0) 2023.05.19