
* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
추가하기 버튼 누르면 콘솔에 아래 같이 에러가 나옵니다

import certifi
from pymongo import MongoClient
from flask import Flask, render_template, request, jsonify
application = app = Flask(__name__)
ca = certifi.where()
client = MongoClient(
'mongodb+srv://sparta:test@cluster0.rvfdb4x.mongodb.net/?retryWrites=true&w=majority', tlsCAFile=ca)
db = client.dbsparta
@app.route('/')
def home():
return render_template('index.html')
@app.route("/guestbook", methods=["POST"])
def guestbook_post():
name_receive = request.form['name_give']
pros_receive = request.form['pros_give']
blog_receive = request.form['blog_give']
mbti_receive = request.form['mbti_give']
selso_receive = request.form['selso_give']
coworkst_receive = request.form['coworkst_give']
doc = {
'name': name_receive,
'pros': pros_receive,
'blog': blog_receive,
'mbti': mbti_receive,
'selso': selso_receive,
'coworkst': coworkst_receive
}
db.members.insert_one(doc)
return jsonify({'msg': '저장 완료!'})
@app.route("/guestbook", methods=["GET"])
def guestbook_get():
all_members = list(db.members.find({}, {'_id': False}))
return jsonify({'result': all_members})
if __name__ == '__main__':
app.run()
<!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" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"
integrity="sha512-iecdLmaskl7CVkqkXNQ/ZH/XLlvWZOJyj7Yy7tcenmpD1ypASozpmT/E0iPtmFIB46ZmdtAc9eNBvH0H/ZpiBw=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://kit.fontawesome.com/07cd59d18d.js" crossorigin="anonymous"></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>
<title>9조가 궁금하니?</title>
<style>
body {
margin: 0;
background-color: #E9EDF1;
}
.title {
text-align: center;
/* border: 1px solid black; */
height: 300px;
background: linear-gradient(to right, #0F2027, #203A43, #2C5364);
}
.title>h1 {
line-height: 300px;
color: white
}
.container {
padding: 30px;
box-sizing: border-box;
/* border: 1px solid black; */
height: 1500px
}
.container>.info-box {
/* border: 1px solid black; */
height: 320px;
display: flex;
justify-content: space-between;
}
.container>.info-box>.img-card {
display: inline-block;
/* border: 1px solid black; */
width: 50%;
height: 320px;
background-image: url('https://sitem.ssgcdn.com/99/25/28/item/1000053282599_i1_1100.jpg');
background-size: cover;
background-position: center;
}
.container>.info-box>.info-card {
/* border: 1px solid black; */
height: inherit;
width: 50%;
display: inline-block;
margin: 0;
box-sizing: border-box;
padding: 25px;
}
.container>.info-box>.info-card>div:nth-child(1) {
display: flex;
align-items: center;
}
.container>.info-box>.info-card>div:nth-child(1)>.team-icon {
font-size: 30px;
}
.container>.info-box>.info-card>div:nth-child(1)>h3 {
margin-bottom: 0;
margin-left: 10px;
}
.container>.info-box>.info-card>.box-br {
border: 0.1px solid rgba(155, 149, 149, 0.822);
/* height: 1px; */
}
.container>.add-box {
/* border: 1px solid black; */
height: 100px;
display: flex;
align-items: center;
align-content: center;
justify-content: space-evenly;
}
.container>.add-box>.line {
width: 30rem;
border: 1px solid black;
}
.container>.add-box>.circle-in-button {
width: 50px;
height: 50px;
text-align: center;
line-height: 50px;
border-radius: 70%;
}
.container>.add-box>.plus-button {
font-size: 35px;
cursor: pointer;
}
.container>.add-box>.plus-button:hover {
font-size: 35px;
color: white;
cursor: pointer;
}
.container>.input-container {
display: none;
justify-content: center;
margin-bottom: 30px;
/* transition: 1s; */
transition: smooth;
}
.container>.input-container>.input-box {
display: block;
border: 1px solid black;
width: 500px;
/* height: 300px; */
border-radius: 10px;
padding: 20px;
box-sizing: border-box;
}
.container>.input-container>.input-box>.input-list {
margin-top: 1rem;
display: flex;
flex-direction: column;
justify-content: space-around;
}
.container>.input-container>.input-box>.input-list>.button {
margin-top: 1rem;
text-align: center;
}
.member-box {
margin-top: 10px;
/* border: 1px solid black; */
}
.member-box>div:nth-child(1) {
display: flex;
align-items: center;
margin-bottom: 20px;
}
.member-box>div:nth-child(1)>.icon {
font-size: 30px;
margin-right: 10px;
margin-left: 10px;
}
.member-box>div:nth-child(1)>h3 {
margin: 0;
}
.member-box>.member-list {
display: flex;
flex-wrap: wrap;
flex-direction: row;
justify-content: space-between;
/* align-content: space-between; */
}
.member-box>.member-list>.card {
margin-bottom: 20px;
cursor: pointer;
}
.box-padding {
padding: 20px;
box-sizing: border-box;
}
</style>
<script>
function showAddBox() {
$('.input-container').fadeToggle().css('display', 'flex');
}
function addMember() {
let name = $('#name').val()
let pros = $('#pros').val()
let blog = $('#blog').val()
let mbti = $('#mbti').val()
let selso = $('#selso').val()
let coworkst = $('#coworkst').val()
let formData = new FormData();
formData.append("name_give", name);
formData.append("pros_give", pros);
formData.append("blog_give", blog);
formData.append("mbti_give", mbti);
formData.append("selso_give", selso);
formData.append("coworkst_give", coworkst);
fetch('/guestbook', { method: "POST", body: formData, }).then((res) => res.json()).then((data) => {
alert(data["msg"]);
window.location.reload()
});
}
function show_member() {
fetch('/guestbook').then((res) => res.json()).then((data) => {
let rows = data['result']
$('#member-lists').empty()
rows.forEach((a) => {
let name = a['name']
let pros = a['pros']
let blog = a['blog']
let mbti = a['mbti']
let selso = a['selso']
let coworkst = a['coworkst']
let temp_html = `<div class="card" style="width: 20rem;">
<img src="https://cat-lab.co.kr/data/editor/2208/44260b1422d6d1c37cb8924eda0ff0da_1660874550_4264.jpg" class="card-img-top" alt="...">
<div class="card-body">
<h4>${name}</h4>
<p class="card-text">${selso}</p>
<p>${pros}</p>
<p>${blog}</p>
<p>${mbti}</p>
<p>${coworkst}</p>
</div>
</div>`
$('#member-lists').append(temp_html)
});
})
}
</script>
</head>
<body>
<!-- 사이트 맨 위의 타이틀 -->
<div class="title">
<h1>9조를 소개 합니다!</h1>
</div>
<div class="container">
<!-- 팀 소개 섹션 -->
<div class="info-box">
<div class="img-card">
</div>
<div class="info-card">
<div>
<i class="fa-solid fa-people-group team-icon"></i>
<h3>팀 몬스터</h3>
</div>
<div class="box-br"></div>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae ullam non sunt fugiat, quia
facilis officiis porro beatae, optio cupiditate labore voluptas cumque necessitatibus culpa?
Doloribus aperiam itaque facilis placeat.
</p>
<el>
<li>팀 각오: 어쩌구</li>
<li>특징 1: 어쩌구</li>
</el>
</div>
</div>
<!-- 새 멤버 추가 -->
<div class="add-box">
<div class="line"></div>
<i class="fa-solid fa-plus plus-button" onclick="showAddBox()"></i>
<div class="line"></div>
</div>
<div class="input-container">
<div class="input-box">
<h4>새 멤버추가하기!</h4>
<div class="input-list">
<div class="input-group mb-3">
<span class="input-group-text" id="name">이름</span>
<input type="text" class="form-control" aria-label="Sizing example input"
aria-describedby="inputGroup-sizing-default">
</div>
<div class="input-group">
<span class="input-group-text" id="selso">자기소개</span>
<textarea class="form-control" aria-label="With textarea" style="height: 100px;"></textarea>
</div>
<P></P>
<div class="input-group mb-3">
<span class="input-group-text" id="pros">장점</span>
<input type="text" class="form-control" aria-label="Sizing example input"
aria-describedby="inputGroup-sizing-default">
</div>
<div class="input-group mb-3">
<span class="input-group-text" id="blog">블로그 주소</span>
<input type="text" class="form-control" aria-label="Sizing example input"
aria-describedby="inputGroup-sizing-default">
</div>
<div class="input-group mb-3">
<span class="input-group-text" id="mbti">MBTI</span>
<input type="text" class="form-control" aria-label="Sizing example input"
aria-describedby="inputGroup-sizing-default">
</div>
<div class="input-group mb-3">
<span class="input-group-text" id="coworkst">협업 스타일</span>
<input type="text" class="form-control" aria-label="Sizing example input"
aria-describedby="inputGroup-sizing-default">
</div>
<div class="button">
<button onclick="addMember()" type="button" class="btn btn-outline-primary">추가하기</button>
</div>
</div>
</div>
</div>
<br>
<br>
<div class="member-box">
<div>
<i class="fas fa-user icon"></i>
<h3>우리 멤버 보고가세요~</h3>
</div>
<div class="member-list" id="member-lists">
<div class="card" style="width: 20rem;">
<img src="https://cat-lab.co.kr/data/editor/2208/44260b1422d6d1c37cb8924eda0ff0da_1660874550_4264.jpg"
class="card-img-top" alt="...">
<div class="card-body">
<h4>name</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of
the card's content.</p>
</div>
</div>
<div class="card" style="width: 20rem;">
<img src="https://cat-lab.co.kr/data/editor/2208/44260b1422d6d1c37cb8924eda0ff0da_1660874550_4264.jpg"
class="card-img-top" alt="...">
<div class="card-body">
<h4>name</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of
the card's content.</p>
<p>pros</p>
<p>blog</p>
<p>mbti</p>
<p>coworkst</p>
</div>
</div>
<div class="card" style="width: 20rem;">
<img src="https://cat-lab.co.kr/data/editor/2208/44260b1422d6d1c37cb8924eda0ff0da_1660874550_4264.jpg"
class="card-img-top" alt="...">
<div class="card-body">
<h4>name</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of
the card's content.</p>
</div>
</div>
<div class="card" style="width: 20rem;">
<img src="https://cat-lab.co.kr/data/editor/2208/44260b1422d6d1c37cb8924eda0ff0da_1660874550_4264.jpg"
class="card-img-top" alt="...">
<div class="card-body">
<h4>name</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of
the card's content.</p>
</div>
</div>
<div class="card" style="width: 20rem;">
<img src="https://cat-lab.co.kr/data/editor/2208/44260b1422d6d1c37cb8924eda0ff0da_1660874550_4264.jpg"
class="card-img-top" alt="...">
<div class="card-body">
<h4>name</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of
the card's content.</p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
