일단 이해는 안되서

주말에 다시 파야겠습니다.

 

강의 들으면서 따라할 때는 하는데

숙제가 어렵네요.

분명히 답지랑 다른게 없어보이는데

왜 안될까요?

 

그래서 복붙했더니 또 됩니다.

이해가 안됩니다.

 

왜 2~3번 들으라고 하는 지 알거 같아요.

 

아래는 이번주차 숙제입니다.

팬명록에 기능추가하고 데이터를 서버에 저장합니다.

서버는 잘했는데 html에서 막히다니 저는 프론트는 안될건가봐요..?

 

일단 5주차까지 얼른 듣고 다시 복습해야겠습니다...

요즘 stanford 유튜브에서 하는 computer science 105 를 듣고 있습니다.

이진법이랑 픽셀이랑 아날로그를 디지털화 하는 법까지 여러가지 내용이 흥미롭습니다.

app.py

from flask import Flask, render_template, request, jsonify
app = Flask(__name__)

from pymongo import MongoClient
import certifi

ca = certifi.where();

client = MongoClient('mongodb+srv://test:sparta@cluster0.pdkl25u.mongodb.net/?retryWrites=true&w=majority', tlsCAFile=ca)
db = client.dbsparta

@app.route('/')
def home():
   return render_template('index.html')

@app.route("/homework", methods=["POST"])
def homework_post():
    name_receive = request.form['name_give']
    comment_receive = request.form['comment_give']

    doc = {
        'name': name_receive,
        'comment': comment_receive
    }

    db.homework.insert_one(doc)

    return jsonify({'msg':'응원 완료!'})

@app.route("/homework", methods=["GET"])
def homework_get():
    comment_list = list(db.homework.find({},{'_id':False}))
    return jsonify({'comments':comment_list})


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

index.html

<!DOCTYPE html>
<html lang="en">
<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">

    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
        crossorigin="anonymous"></script>

    <title>초미니홈피 - 팬명록</title>

    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+KR:wght@200;300;400;500;600;700;900&display=swap" rel="stylesheet">
    <style>
        * {
            font-family: 'Noto Serif KR', serif;
        }
        .mypic {
            width: 100%;
            height: 300px;

            background-image: linear-gradient(0deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('https://funshop1.akamaized.net/abroad/034/17285/UA%20True%20Wireless%20Flash%20X%20Project%20Rock%20Edition%201_0.jpg');
            background-position: center;
            background-size: contain;

            color: white;

            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
        }

        .mypost {
            width: 95%;
            max-width: 500px;
            margin: 20px auto 20px auto;

            box-shadow: 0px 0px 3px 0px black;
            padding: 20px;
        }

        .mypost > button {
            margin-top: 15px;
        }

        .mycards {
            width: 95%;
            max-width: 500px;
            margin: auto;
        }

        .mycards > .card {
            margin-top: 10px;
            margin-bottom: 10px;
        }
    </style>
    <script>
        $(document).ready(function(){
            set_temp()
            show_comment()
        });
        function set_temp(){
            $.ajax({
                type: "GET",
                url: "http://spartacodingclub.shop/sparta_api/weather/seoul",
                data: {},
                success: function (response) {
                    $('#temp').text(response['temp'])
                }
            })
        }
        function save_comment(){
            let name = $('#name').val()
            let comment = $('#comment').val()
            $.ajax({
                type: 'POST',
                url: '/homework',
                data: {'name_give':name, 'comment_give':comment},
                success: function (response) {
                    alert(response['msg'])
                    window.location.reload()
                }
            })
        }
       function show_comment() {
            $('#comment-list').empty()
            $.ajax({
                type: "GET",
                url: "/homework",
                data: {},
                success: function (response) {
                    let rows = response['comments']
                    for (let i = 0; i < rows.length; i++) {
                        let name = rows[i]['name']
                        let comment = rows[i]['comment']

                        let temp_html = `<div class="card">
                                            <div class="card-body">
                                                <blockquote class="blockquote mb-0">
                                                    <p>${comment}</p>
                                                    <footer class="blockquote-footer">${name}</footer>
                                                </blockquote>
                                            </div>
                                        </div>`
                        $('#comment-list').append(temp_html)
                    }
                }
            });
        }
    </script>
</head>
<body>
    <div class="mypic">
        <h1>Dwayne Johnson 팬명록</h1>
        <p>현재기온: <span id="temp">36</span>도</p>
    </div>
    <div class="mypost">
        <div class="form-floating mb-3">
            <input type="text" class="form-control" id="name" placeholder="url">
            <label for="floatingInput">닉네임</label>
        </div>
        <div class="form-floating">
            <textarea class="form-control" placeholder="Leave a comment here" id="comment"
                style="height: 100px"></textarea>
            <label for="floatingTextarea2">응원댓글</label>
        </div>
        <button onclick="save_comment()" type="button" class="btn btn-dark">응원 남기기</button>
    </div>
    <div class="mycards" id="comment-list">

    </div>
</body>
</html>

3주차 웹개발 강의는 

Python과 MongoDB를 다루는 연습을 했습니다.

Python으로 코드를 쳐서 MongoDB에 데이타를 업데이트했습니다.

 

처음에 MongoDB에 업데이트가 안되고 계속 오류가 났었습니다.

[SSL: CERTIFICATE_VERIFY_FAILED]

 

이런 오류가 났었는데

열심히 구글링한 결과

 

certifi라는 패키지를 설치하고

from pymongo import MongoClient
import certifi

ca = certifi.where();

client = MongoClient('내MongoDB주소', tlsCAFile=ca)
db = client.dbsparta

위의 코드를 삽입하니 실행이 되었습니다.

 

뭐가 틀렸는지 눈빠지게 보다가 선생님과 다른 코드는 없는 걸로 확인하고 뒤늦게 구글링해서 오류의 원인을 찾아냈습니다.

 

모니터 받힘대와 무선 키보드를 구매해야할 것 같습니다.

일단 새로운 맥북은 핑핑 잘돌아갑니다. 

 

249만원 짜리 맥북을 위한 케이스도 사야겠습니다. 

벌써 매몰비용만 600만원이 넘어갑니다.

거의 국내대학 한학기 등록금.

 

아직까지 수업은 흥미롭고 재미있습니다.

 

 

아래는 3주차 과제로 진행한 지니 뮤직 차트 크롤링하는 코드입니다.

 

카피 하고 싶은 부분에 대고

검사 > copy > copy selector 

 

soup.select('')를 이용해서 크롤링을 해옵니다.

import requests
from bs4 import BeautifulSoup


headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://www.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20210701',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.number
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.artist.ellipsis

music = soup.select('#body-content > div.newest-list > div > table > tbody > tr')

for genie in music:
    rank = genie.select_one('td.number').text[0:2].strip()
    title = genie.select_one('td.info > a.title.ellipsis').text.strip()
    artist = genie.select_one('td.info > a.artist.ellipsis').text.strip()
    print(rank, title, artist)

말은 2주차이지만

공부한지 2일차입니다.

 

웹개발 종합반 강의를 듣고 있는데 5주짜리 강의지만 1주당 강의 길이는 1시간 정도 입니다.

11월에 부트캠프가 본격적으로 시작하기 전에 웹개발 종합반 강의를 3회 반복 수강할 예정입니다.

 

2주차 강의에서는 

JQuery

Ajax를 배웠습니다.

 

가끔 왜 안되지 하고 보면 점 하나를 놓쳤거나 오타가 있었습니다.

좀 더 꼼꼼하게 봐야할 것 같습니다.

그래도 아직까지는 수업 따라가기가 어렵지는 않습니다.

 

아래는 이번 주차 숙제입니다.

1주차에 만들었던 팬명록에 현재 기온을 실시간으로 업데이트 할 수 있는 기능을 추가했습니다.

 

<!doctype html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
        crossorigin="anonymous"></script>

    <title>스파르타코딩클럽 | 부트스트랩 연습하기</title>
  <link href="https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap" rel="stylesheet">

  <style>
     * {
            font-family: 'Gowun Dodum', sans-serif;
        }
    .mytitle {
            width: 100%;
            height: 300px;

            background-image: linear-gradient(0deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('https://funshop1.akamaized.net/abroad/034/17285/UA%20True%20Wireless%20Flash%20X%20Project%20Rock%20Edition%201_0.jpg');
            background-position: center;
            background-size: contain;

            color: white;

            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
        }
    .mypost {
            width: 95%;
            max-width: 500px;
            margin: 20px auto 0px auto;
            padding: 20px;
            box-shadow: 0px 0px 3px 0px gray;
        }
    .mypost > button {
      margin-top: 20px;
    }
    .card {
      width: 95%;
      max-width: 500px;
      margin: 10px auto 0px auto;
      padding: 20px;
      box-shadow: 0px 0px 3px 0px gray;
    }
  </style>
  <script>
    $(document).ready(function () {
      $.ajax({
        type: "GET",
        url: "http://spartacodingclub.shop/sparta_api/weather/seoul",
        data: {},
        success: function (response) {
         let temp = response['temp']
          $('#temp').text(temp)

        }
      })
    });

  </script>
</head>

<body>
    <div class="mytitle">
      <h1>Dwayne Johnson 팬명록</h1>
      <p>현재기온 : <span id="temp">00.0</span>도</p>
    </div>
    <div class="mypost">
      <div class="form-floating mb-3">
        <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
        <label for="floatingInput">닉네임</label>
      </div>
      <div class="form-floating">
                <textarea class="form-control" placeholder="Leave a comment here" id="floatingTextarea2"
                          style="height: 100px"></textarea>
        <label for="floatingTextarea2">응원댓글</label>
      </div>
      <button type="button" class="btn btn-dark">응원 남기기</button>
    </div>
    <div class="card">
      <div class="card-body">
        <blockquote class="blockquote mb-0">
          <p>The rock rocks!</p>
          <footer class="blockquote-footer">이지농
        </blockquote>
      </div>
    </div>


<div class="card">
  <div class="card-body">
    <blockquote class="blockquote mb-0">
      <p>The rock rocks!</p>
      <footer class="blockquote-footer">이지농
    </blockquote>
  </div>
</div>

<div class="card">
  <div class="card-body">
    <blockquote class="blockquote mb-0">
      <p>The rock rocks!</p>
      <footer class="blockquote-footer">이지농
    </blockquote>
  </div>
</div>


</body>

</html>

온라인 부트캠프 사전 강의

1주차 과제를 끝냈습니다.

온라인을 할지 오프라인을 할지 고민이 많았는데

결국에는 온라인을 선택했고

맥북프로를 살질 맥북 에어를 살지 고민했는데

결국 맥북프로 14인치를 샀습니다.

 

확실히 2015년 버전 맥북에어보다는 프로그램로딩 속도도 그렇고 화질도 그렇고 음량도 굉장히 좋습니다.

단지 키보드 소리가 거슬리는데

키보드랑 모니터 받힘대랑 여러가지 살 아이템들이 많습니다.

 

어제랑 오늘 웹개발 종합반 1주차 강의를 들었고 아래는 강의 과제입니다.

간단하게 css와 html을 활용해서

팬명록이라는 것을 만들었습니다.

 

부스트스랩이라는 사이트에서 복붙을해와서 꾸미기를 했습니다.

 

html은 뼈대

css는 꾸미기라는 개념을 익혔습니다.

 

아직까지는 쉽고 따라갈만한데

얼마나 더 어려워질지 궁금합니다.

 

Javascript 함수를 맛보기를 보여주셨는데

엑셀 함수를 알아서 괜찮습니다.

 

확실히 이과생들이 유리한 과목 같습니다.

 

<!doctype html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
        crossorigin="anonymous"></script>

    <title>스파르타코딩클럽 | 부트스트랩 연습하기</title>
  <link href="https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap" rel="stylesheet">

  <style>
     * {
            font-family: 'Gowun Dodum', sans-serif;
        }
    .mytitle {
            width: 100%;
            height: 300px;

            background-image: linear-gradient(0deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('https://funshop1.akamaized.net/abroad/034/17285/UA%20True%20Wireless%20Flash%20X%20Project%20Rock%20Edition%201_0.jpg');
            background-position: center;
            background-size: contain;

            color: white;

            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
        }
    .mypost {
            width: 95%;
            max-width: 500px;
            margin: 20px auto 0px auto;
            padding: 20px;
            box-shadow: 0px 0px 3px 0px gray;
        }
    .mypost > button {
      margin-top: 20px;
    }
    .card {
      width: 95%;
      max-width: 500px;
      margin: 10px auto 0px auto;
      padding: 20px;
      box-shadow: 0px 0px 3px 0px gray;
    }
  </style>
</head>

<body>
<div class="mytitle">
  <h1>Dwayne Johnson 팬명록</h1>
</div>
<div class="mypost">
  <div class="form-floating mb-3">
    <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
    <label for="floatingInput">닉네임</label>
  </div>
  <div class="form-floating">
            <textarea class="form-control" placeholder="Leave a comment here" id="floatingTextarea2"
                      style="height: 100px"></textarea>
    <label for="floatingTextarea2">응원댓글</label>
  </div>
  <button type="button" class="btn btn-dark">응원 남기기</button>
</div>
<div class="card">
  <div class="card-body">
    <blockquote class="blockquote mb-0">
      <p>The rock rocks!</p>
      <footer class="blockquote-footer">이지농
    </blockquote>
  </div>
</div>


<div class="card">
  <div class="card-body">
    <blockquote class="blockquote mb-0">
      <p>The rock rocks!</p>
      <footer class="blockquote-footer">이지농
    </blockquote>
  </div>
</div>

<div class="card">
  <div class="card-body">
    <blockquote class="blockquote mb-0">
      <p>The rock rocks!</p>
      <footer class="blockquote-footer">이지농
    </blockquote>
  </div>
</div>


</body>

</html>

+ Recent posts