-
프로젝트 : 01. 모두의책리뷰(bookreview) - POST 연습스파르타코딩/스파르타코딩 4주차 2022. 6. 8. 09:40
프로젝트 시작전 기본 세팅
bookreview 안에 폴더 2개 - static , templates(index.html 까지 생성) 그리고 app.py(파이썬 파일) 생성
pymongo 와 flask 다운로드
<html 뼈대 code>
<!DOCTYPE html> <html lang="ko"> <head> <!-- Webpage Title --> <title>모두의 책리뷰 | 스파르타코딩클럽</title> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <!-- JS --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <!-- 구글폰트 --> <link href="https://fonts.googleapis.com/css?family=Do+Hyeon&display=swap" rel="stylesheet"> <script type="text/javascript"> $(document).ready(function () { showReview(); }); function makeReview() { let title = $('#title').val() let author = $('#author').val() let review = $('#bookReview').val() $.ajax({ type: "POST", url: "/review", data: {title_give:title, author_give:author, review_give:review}, success: function (response) { alert(response["msg"]); window.location.reload(); } }) } function showReview() { $.ajax({ type: "GET", url: "/review?sample_give=샘플데이터", data: {}, success: function (response) { alert(response["msg"]); } }) } </script> <style type="text/css"> * { font-family: "Do Hyeon", sans-serif; } h1, h5 { display: inline; } .info { margin-top: 20px; margin-bottom: 20px; } .review { text-align: center; } .reviews { margin-top: 100px; } </style> </head> <body> <div class="container"> <img src="https://previews.123rf.com/images/maxxyustas/maxxyustas1511/maxxyustas151100002/47858355-education-concept-books-and-textbooks-on-the-bookshelf-3d.jpg" class="img-fluid" alt="Responsive image"> <div class="info"> <h1>읽은 책에 대해 말씀해주세요.</h1> <p>다른 사람을 위해 리뷰를 남겨주세요! 다 같이 좋은 책을 읽는다면 다 함께 행복해질 수 있지 않을까요?</p> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text">제목</span> </div> <input type="text" class="form-control" id="title"> </div> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text">저자</span> </div> <input type="text" class="form-control" id="author"> </div> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text">리뷰</span> </div> <textarea class="form-control" id="bookReview" cols="30" rows="5" placeholder="140자까지 입력할 수 있습니다."></textarea> </div> <div class="review"> <button onclick="makeReview()" type="button" class="btn btn-primary">리뷰 작성하기</button> </div> </div> <div class="reviews"> <table class="table"> <thead> <tr> <th scope="col">제목</th> <th scope="col">저자</th> <th scope="col">리뷰</th> </tr> </thead> <tbody id="reviews-box"> <tr> <td>왕초보 8주 코딩</td> <td>김르탄</td> <td>역시 왕초보 코딩교육의 명가답군요. 따라하다보니 눈 깜짝할 사이에 8주가 지났습니다.</td> </tr> </tbody> </table> </div> </div> </body> </html>
<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') ## 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(): sample_receive = request.args.get('sample_give') print(sample_receive) return jsonify({'msg': '이 요청은 GET!'}) if __name__ == '__main__': app.run('0.0.0.0', port=5000, debug=True)
app.py
## API 역할을 하는 부분## POST 부분을 보자.
/review , methods ='POST' 이 부분이
HTML 파일에 makeReview() 에 요청을 받아오게 설계하였다.
makeReview는 버튼('리뷰 작성하기')을 클릭하면 실행되게 설계함
<div class="review"> <button onclick="makeReview()" type="button" class="btn btn-primary">리뷰 작성하기</button> </div>
function makeReview() { let title = $('#title').val() let author = $('#author').val() let review = $('#bookReview').val() $.ajax({ type: "POST", url: "/review", data: {title_give:title, author_give:author, review_give:review}, success: function (response) { alert(response["msg"]); window.location.reload(); } })
각각의 박스 id ( 제목 박스의 id 는 title, 저자 박스의 id는 author, 리뷰 박스의 id는 bookReview로 만듬)에 사용자가 적은 내용을 담아서 받아 변수에 담아주었다 ( let title = $('#title').val() 등)
그리고 요청이 정상적으로 처리되면 alert(response["msg"]) = 저장 완료! 문구와 함께 새로고침(location.reload()) 해주었다.
이와 동시에 app.py 의 doc (title, author, review) 부분이 db.bookreview.insert_one(doc) 로 인해 DB에도 저장되어진다.
'스파르타코딩 > 스파르타코딩 4주차' 카테고리의 다른 글
4주차 마무리 - 마카롱 쇼핑몰 다듬기(1주차++) (0) 2022.06.15 프로젝트 02 : 나홀로메모장 세팅 및 조각 기능(미리 시연) (0) 2022.06.14 Flask (서버 프레임워크) 설치하기 (0) 2022.06.07