파이썬(Python)/블로그 만들기(python,flask,mongo)

블로그만들기(1) - 게시판 글쓰기 만들기(파이썬(python),Mongodb)

끄적끄적아무거나 2021. 1. 27. 13:26
반응형

개인 블로그를 처음부터 만들면서 공부할 예정이다.

 

우선 웹서버를 동작 시켜줄 프로그램은 Flask를 사용할 생각이다. 그리고 블로그 컨텐츠들은 mongo db에 저장하고 robo 로 결과를 확인할 생각이다. flask 와 mongodb에 대한 부분은 내 블로그 카테고리 또는 검색을 통해 알아보자.

 


 

 

 

아래 코드는 파이썬에서 flask 모듈을 가져와서 선언해주고 mongodb와 연결한 코드이다. 제대로 연결이 되었는지 확인을 위해 임의로 작성한 데이터를 mongodb에 업로드 해보고 결과를 확인해보겠다.

 

코드>>

from flask import *
from flask_pymongo import PyMongo
import time

#########################################################
# Flask 선언, mongodb와 연결
web_bulletin = Flask(__name__, template_folder="templates")
web_bulletin.config["MONGO_URI"] = "mongodb://localhost:27017/bulletin" 
web_bulletin.config['SECRET_KEY'] = 'psswrd'

mongo = PyMongo(web_bulletin)
#########################################################

bulletin = mongo.db.bulletin

to_db = {
    "title": "t_test",
    "contents": "c_test",
    "view": 0,
    "pubdate": time.strftime("%y%m%d_%H%M%S"),
}

to_db_post = bulletin.insert_one(to_db)

if __name__ == "__main__":
    web_bulletin.run(host='0.0.0.0', debug=True, port=9999)

 

 

 

코드 주석>>

web_bulletin 에 Flask를 선언하고 값을 넣었다. template_folder="templates" 는 연결할 html과 같은 파일을 보관할 폴더 이름으로 변경하지 말고 사용하면 된다. 아래 그림처럼 폴더 아래에 html을 저장한다.

web_bulletin.config 는 Flask와 연결될 Mongodo의 환경 변수 값들을 설정하는 것이다.

 

mongo = PyMongo(web_bulletin) 명령을 통해 mongo 이름으로 flask와 mongodb를 연결하고 mongodb 객체를 만들었다.

 

db 값들은 딕션너리 형태로 들어가는 데 예제와 같이 to_db에 넣고 싶은 값을 넣고 mongodb의 bulletin이라는 폴더안에 값을 보내었다.

 

결과>>

결과 확인은 robo라는 mongodb를 확인하기 편리한 GUI를 통해 하였다.

 

코드를 실행한 결과 db에 입력이 잘되었음을 확인할 수 있었다.

 

 


 

 

 

이제 mongodb가 잘 동작함을 확인했으니 게시판을 작성할 차례이다. 

 

게시판 글쓰기 페이지를 먼저 만들어 보겠다.

 

아래 html 파일과 같이 정말 단순한 페이지이다. 나중에 bootstrap으로 꾸밀 예정이다.

 

우선은 작성한 html을 앞서 얘기한 것처럼 templates 폴더에 넣도록 하겠다.

 

코드 bulletin_wr.html>>

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <body>
        <table>
            <form name="form" method="POST" action="/bulletin_wr">
                <tbody>
                    <tr>
                        <td>Title</td>
                        <td><input type="text" name="title"></td>
                    </tr>
                    <tr>
                        <td>Content</td>
                        <td><textarea name="contents"></textarea></td>
                    </tr>
                    <tr>
                        <td><input type="submit"></td>
                    </tr>
                </tbody>
            </form>
        </table>
    </body>
</html>

 

결과>>

이제 위처럼 만든 html을 파이썬(python)의 Flask와 연결 해보겠다.

 


 

 

이제 앞서 만든 bulletin_wr.html 파일과 mongodb와 flask 를 모두 연결하는 코드를 작성해보겠다.

 

코드 board.py>>

from flask import *
from flask_pymongo import PyMongo
import time

#########################################################
# Flask 선언, mongodb와 연결
web_bulletin = Flask(__name__, template_folder="templates")
web_bulletin.config["MONGO_URI"] = "mongodb://localhost:27017/bulletin" 
web_bulletin.config['SECRET_KEY'] = 'psswrd'

mongo = PyMongo(web_bulletin)
#########################################################

@web_bulletin.route("/bulletin_wr", methods=["GET", "POST"])
def bulletin_write():
    if request.method == "POST":
        cur_time = time.strftime("%y%m%d_%H%M%S")
        title = request.form.get("title")
        contents = request.form.get("contents")

        bulletin = mongo.db.bulletin

        to_db = {
            "title": title,
            "contents": contents,
            "view": 0,
            "pubdate": cur_time,
        }
        to_db_post = bulletin.insert_one(to_db)

        return render_template("bulletin_wr.html")
    else:
        return render_template("bulletin_wr.html")

if __name__ == "__main__":
    web_bulletin.run(host='0.0.0.0', debug=True, port=9999)


 

코드주석>>

flask 선언과 mongo db 연결에 대한 설명은 앞서 했으므로 넘어가겠다.

 

@web_bulletin.route 는 웹 브라우져에서 /bulletin_wr 페이지로 접근했을 경우 아래 def bulletin_write(): method를 실행하겠다는 것이다. 페이지 요청은 GET, POST의 경우에만 받겠다는 뜻이다. 

 

처음에 브라우져를 통해 bulletin_wr.html에 접근하면 GET으로 페이지를 요청하게 되므로 return 문이 실행된다. 그래서 페이지를 확인하고 작성한뒤 submit 버튼을 누르면 POST로 접근하게 된다.

 

그리고 bulletin_wr.html에서 form 정보를 받아 db에 넣어주는 것이다.

 

결과는 화면보다는 영상으로 보는 것이 좋을 것 같아 아래 영상으로 준비했다.

 

결과>>

 

아래 영상처럼 웹에 입력한 값이 정상적으로 db에 들어가는 것을 확인하였다.

 

 

 

 

 

반응형