커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
4-8 [화성 땅 공동구매] POST 요청 -> mongoDB에 데이터가 'name: array' 형식으로 뜹니다.
undefined주차
북마크
박*연
댓글
7
추천
0
조회수
14
조회수
14
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.



아래와 같은 코드를 완성하여, 웹 페이지 localhost:5001에서 'Get 연결 완료' 알람도 잘 뜨고, 이름/주소/평수를 입력한 뒤 주문하기 버튼을 눌렀을 때 '저장 완료' 알람도 잘 뜹니다.

그런데 mongo DB를 들어가보면 name: 홍길동, address: 세종시 대왕구 이렇게 바로 뜨지 않고, name: array 한뒤 항목을 열었을 때 그 안에 홍길동이라는 정보가 들어있습니다.

어떻게 해결해야 할까요..


스파르타 즉문즉답스파르타 즉문즉답





1 app.py 코드


from flask import Flask, render_template, request, jsonify

app = Flask(__name__)


from pymongo import MongoClient

import certifi

ca = certifi.where()

# mac 보안 오류로 위 두 줄 추가

# pip install certifi 꼭 해줘야 함 ^^..

client = MongoClient('mongodb+srv://sparta:test@cluster0.8ik2q4d.mongodb.net/?retryWrites=true&w=majority', ssl=True,tlsCAFile = ca)

# 추가 오류로 'url' 뒷 부분 추가

# 및 버전 호환 문제로 터미널에 pip install pymongo==4.3.3 후 오류 해결

db = client.dbsparta

# 여기까지가 mongoDB 사용 시 기본 툴, 복사해서 쓰세요..


@app.route('/')

def home():

return render_template('index.html')


@app.route("/mars", methods=["POST"])

def mars_post():

name_receive = request.form['name_give'],

address_receive = request.form['address_give'],

size_receive = request.form['size_give']


doc = {

'name' : name_receive,

'address': address_receive,

'size' : size_receive

}

db.mars.insert_one(doc)

# 이게 mongoDB에 데이터 넣어주는 함수


return jsonify({'msg':'저장 완료!'})


@app.route("/mars", methods=["GET"])

def mars_get():

return jsonify({'msg':'GET 연결 완료!'})


if __name__ == '__main__':

app.run('0.0.0.0', port=5001, debug=True)



2 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" />


<link

href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"

rel="stylesheet"

integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"

crossorigin="anonymous"

/>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

<script

src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"

integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"

crossorigin="anonymous"

></script>


<link

href="https://fonts.googleapis.com/css2?family=Gowun+Batang:wght@400;700&display=swap"

rel="stylesheet"

/>


<title>선착순 공동구매</title>


<style>

* {

font-family: "Gowun Batang", serif;

color: white;

}


body {

background-image: linear-gradient(

0deg,

rgba(0, 0, 0, 0.5),

rgba(0, 0, 0, 0.5)

),

url("https://cdn.aitimes.com/news/photo/202010/132592_129694_3139.jpg");

background-position: center;

background-size: cover;

}


h1 {

font-weight: bold;

}


.order {

width: 500px;

margin: 60px auto 0px auto;

padding-bottom: 60px;

}


.mybtn {

width: 100%;

}


.order > table {

margin: 40px 0;

font-size: 18px;

}


option {

color: black;

}

</style>

<script>

$(document).ready(function () {

show_order();

});

function show_order() {

fetch("/mars")

.then((res) => res.json())

.then((data) => {

console.log(data);

alert(data["msg"]);

});

}

function save_order() {

let name = $("#name").val();

let address = $("#address").val();

let size = $("#size").val();

// jQuery 사용해서 <BODY>에 있는 이름 / 주소 / 평수 input값 가져오기


let formData = new FormData();

formData.append("name_give", name);

formData.append("address_give", address);

formData.append("size_give", size);


fetch("/mars", { method: "POST", body: formData })

.then((res) => res.json())

.then((data) => {

alert(data["msg"]);

});

}

</script>

</head>


<body>

<div class="mask"></div>

<div class="order">

<h1>화성에 땅 사놓기!</h1>

<h3>가격: 평 당 500원</h3>

<p>

화성에 땅을 사둘 수 있다고?<br />

앞으로 백년 간 오지 않을 기회. 화성에서 즐기는 노후!

</p>

<div class="order-info">

<div class="input-group mb-3">

<span class="input-group-text">이름</span>

<input id="name" type="text" class="form-control" />

</div>

<div class="input-group mb-3">

<span class="input-group-text">주소</span>

<input id="address" type="text" class="form-control" />

</div>

<div class="input-group mb-3">

<label class="input-group-text" for="size">평수</label>

<select class="form-select" id="size">

<option selected>-- 주문 평수 --</option>

<option value="10평">10평</option>

<option value="20평">20평</option>

<option value="30평">30평</option>

<option value="40평">40평</option>

<option value="50평">50평</option>

</select>

</div>

<button

onclick="save_order()"

type="button"

class="btn btn-warning mybtn"

>

주문하기

</button>

</div>

<table class="table">

<thead>

<tr>

<th scope="col">이름</th>

<th scope="col">주소</th>

<th scope="col">평수</th>

</tr>

</thead>

<tbody id="order-box">

<tr>

<td>홍길동</td>

<td>서울시 용산구</td>

<td>20평</td>

</tr>

<tr>

<td>임꺽정</td>

<td>부산시 동구</td>

<td>10평</td>

</tr>

<tr>

<td>세종대왕</td>

<td>세종시 대왕구</td>

<td>30평</td>

</tr>

</tbody>

</table>

</div>

</body>

</html>



취소
 공유
취소
댓글 0
댓글 알림
나의얼굴