Sparta/스파르타코딩 웹개발 종합반

웹개발 종합반 4주차 - Flask로 서버를 구동시켜서 html,css,js와 연동

또롱또 2022. 2. 7. 13:51
728x90

Flask

- Flask 란 파이썬을 기반으로 작성된 마이크로 웹 프레임워크(framework) 중 하나

- 쉬운 만큼 단점도 있는데 그중 하나는 보안 부분에서 비교적 취약

- 서버를 구동시켜주는 편한 코드 모음. 서버를 구동하려면 필요한 복잡한 일들을 쉽게 가져다 쓸 수 있습니다.

 

프레임워크를 쓰지 않으면 태양초를 빻아서 고추장을 만드는 격! 프레임워크는 3분 요리/소스 세트라고 생각하면 되겠습니다!

웹 프레임워크(Web Framework)란?

- 웹 프레임워크란 동적인 웹 페이지나 웹 애플리케이션 등을 개발할 때 발생하는 어려움을 줄여주는 일종의 '틀'

 

Pakage 설치

 - flask

 

프로젝트 폴더 안에,

- static 폴더 (이미지, css파일을 넣어둡니다)

- templates 폴더 (html파일을 넣어둡니다)

- app.py 파일

 

기본 코드

from flask import Flask, render_template, request, jsonify
app = Flask(__name__) # Flask 객체 생성

전체코드 (homework 4)

@app.route('/') # @app.route('/') 는 http://localhost:5000/ 를 가리킵니다.
def home(): # render_template을 이용해서 templates 폴더 안에 있는 ‘index.html’을 불러와 리턴
    return render_template('index.html')

@app.route("/homework", methods=["POST"])  # 메소드를 ‘POST’ 형식으로 선언, DB에 포스트 한다 라고 생각하면 편함
def homework_post():
    nickname_receive = request.form['nickname_give'] # index.html에 요청해서 받아온 데이터를 변수에 저장
    comment_receive = request.form['comment_give']

    doc = {
        'nickname': nickname_receive, # 변수로 오브젝트 만들고
        'comment': comment_receive,
    }
    
    db.FanCommentList.insert_one(doc) # 오브젝트를 내 DB의 FanCommentList에 보내기

    return jsonify({'msg':'Thank you for your Comment!'}) # jsonify() - 사용자가 json data를 내보내도록 제공하는 flask의 함수

@app.route("/homework", methods=["GET"]) # 메소드를 ‘GET’ 형식으로 선언, DB에서 겟 해온다 생각하면 편함
def homework_get():
    comment_list = list(db.FanCommentList.find({}, {'_id': False})) # DB의 FanCommentList에 있는걸 긁어와서 변수에 저장
    return jsonify({'comments': comment_list}) # json data로 저장된 comment_list 데이터를 'comments' 주소로 전송준비

if __name__ == '__main__':
    app.run('0.0.0.0', port=5000, debug=True)
    # 참고로, app.run에서 host 설정은 모든 IP에 대한 접근은 허용한다는 의미, port 설정은 접속시 open될 http port
    #  host 설정 미기재시, localhost(=127.0.0.1)에서만 접근 가능
    #  port 설정 미기재시, 기본적으로 5000번 포트로 세팅

 

index.html 쪽 코드

 // 함수 for send to POST
        function save_comment() {
            // ID가 nickname, comment인곳(input)에서 값을 받아서 변수에 저장
            let name = $('#nickname').val();
            let comment = $('#comment').val();

            $.ajax({
                type: 'POST',
                url: '/homework',
                data: {nickname_give: name, comment_give: comment}, // 변수안의 데이터를 보내기
                success: function (response) {
                    alert(response['msg']) // post 에서 받아온
                    window.location.reload() // 브라우저 restart
                }
            })
        }
        // 함수 for Get
        function show_comment() {
            $.ajax({
                type: "GET",
                url: "/homework",
                data: {},
                success: function (response) {
                    // DB에서 받아온 것들을 변수에 저장
                    let rows = response['comments']

                    //for 문으로 변수를 돌면서 필요한거 꺼내기
                    for(let i = 0; i < rows.length; ++i){
                        let nickname = rows[i]['nickname'];
                        let comment = rows[i]['comment']

                        // html을 어떻게 add할지
                        let temp_html = `<div class="card">
                                            <div class="card-body">
                                                <blockquote class="blockquote mb-0">
                                                    <p>${comment}</p>
                                                    <footer class="blockquote-footer">${nickname}</cite></footer>
                                                </blockquote>
                                            </div>
                                        </div>`

                        // html을 필요한 위치의 id에 add
                        $('#card_comment').append(temp_html);

                    }

                }
            });
        }

 

 

728x90