etc.

006 / 스파르타코딩클럽 왕초보 웹개발 4주차 일지 (Flask, API, 모두의 책리뷰)

zubetcha 2021. 10. 22. 18:24

01. Flask

1. Flask 기초

  • Flask 프레임워크는 서버를 구동시켜 주는 편한 코드 모음. 서버를 구동하기 위해 필요한 복잡한 일들을 가져다 사용할 수 있음

📌 통상적으로 flask 서버를 돌리는 파일의 이름은 app.py 라고 짓는다.

  • Flask 시작 코드
from flask import Flask
app = Flask(__name__)

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

if __name__ == '__main__':  
   app.run('0.0.0.0',port=5000,debug=True)
  • Flask 폴더 구조: (Python) app.py, (Directory) static, (Directory) templates > (HTML) index.html

 

2. API - GET, POST 방식

GET 방식

  • 통상적으로 데이터 조회(Read)를 요청할 때 ex) 영화 목록 조회
  • 데이터 전달: URL 뒤에 물음표를 붙여 key=value 로 전달 ex) google.com?q=북극곰
  • GET 요청 API 코드
@app.route('/test', methods=['GET'])
def test_get():
   title_receive = request.args.get('title_give')
   print(title_receive)
   return jsonify({'result':'success', 'msg': '이 요청은 GET!'})
  • GET 요청 확인 AJax 코드
$.ajax({
    type: "GET",
    url: "/test?title_give=봄날은간다",
    data: {},
    success: function(response){
       console.log(response)
    }
  })

POST 방식

  • 통상적으로 데이터 생성(Create), 변경(Update), 삭제(Delete) 요청할 때 ex) 회원가입, 회원 탈퇴, 비밀번호 수정
  • 데이터 전달: 바로 보이지 않는 HTML Body에 key:value 로 전달
  • POST 요청 API 코드
@app.route('/test', methods=['POST'])
def test_post():
   title_receive = request.form['title_give']
   print(title_receive)
   return jsonify({'result':'success', 'msg': '이 요청은 POST!'})
  • POST 요청 확인 AJax 코드
$.ajax({
    type: "POST",
    url: "/test",
    data: { title_give:'봄날은간다' },
    success: function(response){
       console.log(response)
    }
  })

 

3. API 만들고 사용하는 순서

    1. 클라이언트와 서버 확인하기
    1. 서버부터 만들기
    1. 클라이언트 만들기
    1. 완성 확인하기

02. 모두의 북리뷰

  • Flask API 전체 코드
  • from flask import Flask, render_template, jsonify, request
    app = Flask(__name__)
    
    from pymongo import MongoClient
    client = MongoClient('localhost', 27017)
    db = client.dbsparta
    
    ## HTML을 주는 부분
    @app.route('/')
    def home():
        return render_template('index.html')
    
    ## API 역할을 하는 부분
    @app.route('/review', methods=['POST'])
    def write_review():
        title_receive = request.form['title_give']
        author_receive = request.form['author_give']
        review_receive = request.form['review_give']
    
        doc = {
            'title':title_receive,
            'author':author_receive,
            'review':review_receive
        }
    
        db.bookreview.insert_one(doc)
    
        return jsonify({'msg': '저장 완료!'})
    
    
    @app.route('/review', methods=['GET'])
    def read_reviews():
        reviews = list(db.bookreview.find({}, {'_id': False}))
    
        return jsonify({'all_reviews':reviews})
    
    
    if __name__ == '__main__':
        app.run('0.0.0.0', port=5000, debug=True)
  • templates > index.html 전체 코드  
    Responsive image

    읽은 책에 대해 말씀해주세요.

    다른 사람을 위해 리뷰를 남겨주세요! 다 같이 좋은 책을 읽는다면 다 함께 행복해질 수 있지 않을까요?

    제목
    저자
    리뷰
    제목 저자 리뷰

03. 4주차 숙제

  • 페이지 구현 화면
  • app.py
  • from flask import Flask, render_template, jsonify, request
    app = Flask(__name__)
    
    from pymongo import MongoClient
    client = MongoClient('localhost', 27017)
    db = client.dbsparta
    
    ## HTML을 주는 부분
    @app.route('/')
    def home():
        return render_template('index.html')
    
    @app.route('/order', methods=['POST'])
    def order_post():
       name_receive = request.form['name_give']
       qty_receive = request.form['qty_give']
       address_receive = request.form['address_give']
       cp_receive = request.form['cp_give']
    
       doc = {
           'name':name_receive,
           'qty':qty_receive,
           'address':address_receive,
           'cp':cp_receive
       }
    
       db.orders.insert_one(doc)
    
       return jsonify({'result':'success', 'msg': '주문이 완료되었습니다!'})
    
    @app.route('/order', methods=['GET'])
    def order_get():
        orders = list(db.orders.find({}, {'_id': False}))
    
        return jsonify({'all_orders':orders})
    
    if __name__ == '__main__':
        app.run('0.0.0.0', port=5000, debug=True)
  • index.html 코드

    양초를 팝니다 가격: 3,000원/개

    이 양초는 사실 특별한 히을 가지고 있어요. 양초를 키고 소원을 빌면 짜자잔 뭐든지 이뤄지게 된답니다. 하나 사가세요! 대나무 향이 아주 좋아요!

     

    주문자 이름
    주소
    전화번호
    이름 수량 주소 전화번호