127.0.0.1 - - [06/Sep/2022 15:30:13] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [06/Sep/2022 15:30:13] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [06/Sep/2022 15:30:43] "GET /bucket HTTP/1.1" 500 -
Traceback (most recent call last):
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/flask/app.py", line 2548, in __call__
return self.wsgi_app(environ, start_response)
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/flask/app.py", line 2528, in wsgi_app
response = self.handle_exception(e)
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
response = self.full_dispatch_request()
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
rv = self.dispatch_request()
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/Volumes/T7/sparta/projects/buket/app.py", line 36, in bucket_get
buckets_list = list(db.bucket.find({},{'_id':False}))
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/pymongo/cursor.py", line 1248, in next
if len(self.__data) or self._refresh():
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/pymongo/cursor.py", line 1139, in _refresh
self.__session = self.__collection.database.client._ensure_session()
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/pymongo/mongo_client.py", line 1712, in _ensure_session
return self.__start_session(True, causal_consistency=False)
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/pymongo/mongo_client.py", line 1657, in __start_session
self._topology._check_implicit_session_support()
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/pymongo/topology.py", line 538, in _check_implicit_session_support
self._check_session_support()
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/pymongo/topology.py", line 554, in _check_session_support
self._select_servers_loop(
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/pymongo/topology.py", line 238, in _select_servers_loop
raise ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: ac-bpahek6-shard-00-00.omhyorx.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108),ac-bpahek6-shard-00-02.omhyorx.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108),ac-bpahek6-shard-00-01.omhyorx.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108), Timeout: 30s, Topology Description: <TopologyDescription id: 6316e8ec1ab8e804b73ca662, topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription ('ac-bpahek6-shard-00-00.omhyorx.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-bpahek6-shard-00-00.omhyorx.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)')>, <ServerDescription ('ac-bpahek6-shard-00-01.omhyorx.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-bpahek6-shard-00-01.omhyorx.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)')>, <ServerDescription ('ac-bpahek6-shard-00-02.omhyorx.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-bpahek6-shard-00-02.omhyorx.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)')>]>
127.0.0.1 - - [06/Sep/2022 15:30:45] "POST /bucket HTTP/1.1" 500 -
Traceback (most recent call last):
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/flask/app.py", line 2548, in __call__
return self.wsgi_app(environ, start_response)
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/flask/app.py", line 2528, in wsgi_app
response = self.handle_exception(e)
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
response = self.full_dispatch_request()
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
rv = self.dispatch_request()
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/Volumes/T7/sparta/projects/buket/app.py", line 17, in bucket_post
bucket_list = list(db.bucket.find({},{'_id':False}))
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/pymongo/cursor.py", line 1248, in next
if len(self.__data) or self._refresh():
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/pymongo/cursor.py", line 1139, in _refresh
self.__session = self.__collection.database.client._ensure_session()
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/pymongo/mongo_client.py", line 1712, in _ensure_session
return self.__start_session(True, causal_consistency=False)
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/pymongo/mongo_client.py", line 1657, in __start_session
self._topology._check_implicit_session_support()
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/pymongo/topology.py", line 538, in _check_implicit_session_support
self._check_session_support()
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/pymongo/topology.py", line 554, in _check_session_support
self._select_servers_loop(
File "/Volumes/T7/sparta/projects/buket/venv/lib/python3.8/site-packages/pymongo/topology.py", line 238, in _select_servers_loop
raise ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: ac-bpahek6-shard-00-00.omhyorx.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108),ac-bpahek6-shard-00-02.omhyorx.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108),ac-bpahek6-shard-00-01.omhyorx.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108), Timeout: 30s, Topology Description: <TopologyDescription id: 6316e8ec1ab8e804b73ca662, topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription ('ac-bpahek6-shard-00-00.omhyorx.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-bpahek6-shard-00-00.omhyorx.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)')>, <ServerDescription ('ac-bpahek6-shard-00-01.omhyorx.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-bpahek6-shard-00-01.omhyorx.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)')>, <ServerDescription ('ac-bpahek6-shard-00-02.omhyorx.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-bpahek6-shard-00-02.omhyorx.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)')>]>
코드는 동일하게 들어간것 같은데, 자꾸 위와같은 메세지가 나옵니다.
파이몽고 관련 오류인듯 한데, 무엇이 문제인지 원인 파악이 어렵습니다
[app.py]
from pymongo import MongoClient
client = MongoClient('mongodb+srv://joyfive:whdlvkdlqm999@cluster0.omhyorx.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta
#mongodb+srv://joyfive:<password>@cluster0.omhyorx.mongodb.net/?retryWrites=true&w=majority
from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html')
@app.route("/bucket", methods=["POST"])
def bucket_post():
bucket_receive = request.form["bucket_give"]
bucket_list = list(db.bucket.find({},{'_id':False}))
count = len(bucket_list) + 1
doc = {
'num':count,
'bucket':bucket_receive,
'done':0,
}
db.bucket.insert_one(doc)
return jsonify({'msg': '버킷리스트가 추가 되었습니다.'})
@app.route("/bucket/done", methods=["POST"])
def bucket_done():
num_receive = request.form["num_give"]
db.bucket.update_one({'num': int(num_receive)}, {'$set': {'done': 1}})
return jsonify({'msg': '버킷 수행 완료!'})
@app.route("/bucket", methods=["GET"])
def bucket_get():
buckets_list = list(db.bucket.find({},{'_id':False}))
return jsonify({'buckets': buckets_list})
if __name__ == '__main__':
app.run('0.0.0.0', port=8080, 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"> <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+Dodum&display=swap" rel="stylesheet"> <title>인생 버킷리스트</title> <style> * { font-family: 'Gowun Dodum', sans-serif; } .mypic { width: 100%; height: 200px; background-image: linear-gradient(0deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('https://images.unsplash.com/photo-1601024445121-e5b82f020549?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1189&q=80'); background-position: center; background-size: cover; color: white; display: flex; flex-direction: column; align-items: center; justify-content: center; } .mypic > h1 { font-size: 30px; } .mybox { width: 95%; max-width: 700px; padding: 20px; box-shadow: 0px 0px 10px 0px lightblue; margin: 20px auto; } .mybucket { display: flex; flex-direction: row; align-items: center; justify-content: space-between; } .mybucket > input { width: 70%; } .mybox > li { display: flex; flex-direction: row; align-items: center; justify-content: center; margin-bottom: 10px; min-height: 48px; } .mybox > li > h2 { max-width: 75%; font-size: 20px; font-weight: 500; margin-right: auto; margin-bottom: 0px; } .mybox > li > h2.done { text-decoration: line-through } </style> <script> $(document).ready(function () { show_bucket(); }); function show_bucket() { $('#bucket-list').empty() $.ajax({ type: "GET", url: "/bucket", data: {}, success: function (response) { let rows = response['buckets'] for (let i = 0; i < rows.length; i++ ) { let bucket = rows[i]['bucket'] let num = rows[i]['num'] let done = rows[i]['done'] let temp_html = `` if (done == 0) { temp_html = `<li> <h2>✅${bucket}</h2> <button onClick="done_bucket(${num})" type="button" className="btn btn-outline-primary">완료!</button> </li>` } else { temp_html = `<li> <h2 class="done">✅${bucket}</h2> </li>` } $('#bucket-list').apped(temp_html) } } }); } function save_bucket() { let bucket = $('#bucket').val() $.ajax({ type: "POST", url: "/bucket", data: {bucket_give:bucket}, success: function (response) { alert(response["msg"]) window.location.reload() } }); } function done_bucket(num) { $.ajax({ type: "POST", url: "/bucket/done", data: {num_give:num}, success: function (response) { alert(response["msg"]) window.location.reload() } }); } </script> </head> <body> <div class="mypic"> <h1>나의 버킷리스트</h1> </div> <div class="mybox"> <div class="mybucket"> <input id="bucket" class="form-control" type="text" placeholder="이루고 싶은 것을 입력하세요"> <button onclick="save_bucket()" type="button" class="btn btn-outline-primary">기록하기</button> </div> </div> <div class="mybox" id="bucket-list"> <li> <h2>✅ 호주에서 스카이다이빙 하기</h2> <button onclick="done_bucket(5)" type="button" class="btn btn-outline-primary">완료!</button> </li> <li> <h2 class="done">✅ 호주에서 스카이다이빙 하기</h2> </li> <li> <h2>✅ 호주에서 스카이다이빙 하기</h2> <button type="button" class="btn btn-outline-primary">완료!</button> </li> </div> </body> </html>