본문 바로가기

study/flask

[vs code] flask + mongoDB 연결(Read)

flask에 있는 @app.route는 templates라는 폴더 안에 있는 파일만 연결할 수 있다. 

 

- read.html 소스

<!DOCTYPE html>
<html lang="ko">
<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">
    
    <title>read</title>

</head>
<body>
    <div id="notice_div">
        <h1 id="notice_text">test</h1>
    </div>
    <div id="Accordion_wrap">
        <!-- run.py에서 context를 통해 보낸 데이터를 받아서 context 크기만큼 html로 출력함-->
        {%for c in context%}   <!-- context 크기만큼 for문 반복 -->
        <div>
            <span>{{c.name}}</span>   <!-- board 컬랙션의 name 값 -->
        </div>
        <div>
         <span>{{c.title}}</span>   <!-- board 컬랙션의 title 값 -->
        </div>
        <div>
         <span>{{c.contents}}</span>    <!-- board 컬랙션의 contents 값 -->
        </div>
        데이터 가져옴
        {%endfor%}   <!-- for문 end -->
   </div>
</body>
</html>

 

- run.py 소스

from flask import Flask, request
from flask import render_template
from flask_pymongo import PyMongo
from pymongo import MongoClient

app = Flask(__name__)

mongo = PyMongo()

client = MongoClient('mongodb://localhost', 27017)   # 로컬환경에서 mongo db 연결
# client = MongoClient('mongodb://test:test@localhost', 27017)    # db 인증 계정 생성 후 연결 방법

# neuruWeb = 스키마 이름을 느루웹으로 만듬
db = client.neuruWeb

@app.route('/')
def home():
    return 'This is home!'

# data read 부분
@app.route('/read', methods=["GET"])
def notice_data_read():
    # board 컬랙션에 있는 데이터를 다 찾아서 context 변수를 이용해 read.html파일로 보냄
   context = db.board.find()
   return render_template('read.html', context=context)


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

 

 

- flask 서버 실행  --> python run.py

 

- Robo 3T로 mongo DB 데이터 확인 - board 컬랙션

board  컬랙션 안에 name, title, contents 에 데이터가 1,2,3 과 4,5,6이 들어있음으로 read.html에도 1,2,3 과 4,5,6이 출력되야한다.

 

 

- http://localhost:5000/read 에 접속 후 데이터 확인

데이터를 잘 가져온 것을 확인할 수 있다.