TIL&WIL

2023-05-15 TIL (내일배움캠프 미니프로젝트)

blues_jun 2023. 5. 15. 21:17

오늘 학습한 내용

  • 미니 프로젝트

내용

프로젝트 전반적인 내용 소개

https://dao-blog.tistory.com/6


나의 역할

  • 팀 소개 페이지의 메인페이지 역할을 맡았음
  • 정적 페이지가 아닌 db와 연동하여 프로필 정보를 가져오는 코드를 구현해야함

오늘 구현한 코드는 다음과 같다.

1. 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>
    <script src="https://kit.fontawesome.com/5547fa07a6.js" crossorigin="anonymous"></script>
    <link href="https://fonts.googleapis.com/css2?family=Jua&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="/static/style.css">
    <title>소개하조 메인페이지</title>

    <style>
        * {
            font-family: 'Jua', sans-serif;
        }

        @media (min-width: 992px) {
            .container {
                width: 940px;
            }
        }

        .welcome {
            margin: 80px auto !important;
        }

        .circle {
            width: 200px;
            height: 200px;
            border-radius: 50%;
            background-color: green;
            display: inline-block;

            transition: all 0.3s linear;
        }

        .circle:hover {
            transform: scale(1.2);
        }

        a {
            text-decoration: none;
            list-style: none;
            color: black;
        }

        a:hover {
            color: black;
        }

        ul,
        ol,
        li {
            list-style: none;
            margin: 0;
            padding: 0;
        }


        ul.myMenu>li {
            display: inline-block;
            padding: 5px 10px;
            background: #eee;
            border: 1px solid #eee;
            text-align: center;
            position: relative;
        }

        ul.myMenu>li:hover,
        ul.myMenu>a>li:hover {
            background: #fff;
        }

        ul.myMenu>li ul.submenu {
            display: none;
            position: absolute;
            top: 30px;
            left: 0;
        }

        ul.myMenu>li:hover ul.submenu {
            display: block;
        }

        ul.myMenu>li ul.submenu>a>li {
            display: inline-block;
            width: 80px;
            padding: 5px 10px;
            background: green;
            border: 1px solid #fff;
            text-align: center;
            transition: .5s
        }

        ul.myMenu>li ul.submenu>a>li:hover {
            background: blue;
        }

        .menu2 {
            cursor: pointer;
        }

        footer {
            margin-top: 100px;
            height: 150px;
            background-color: green;
        }
    </style>
    <script>
        $(document).ready(function () {
            members_receive();
        });

        function members_receive() {
            fetch('/members').then((res) => res.json()).then((data) => {
                let rows = data['result']
                $('#memberbox2').empty()
                rows.forEach((a) => {
                    let membername = a['membername']
                    let mbti = a['mbti']
                    let image = a['image']

                    let temp_html = `<div class="member mx-auto d-flex flex-column">
                                        <a href="#">
                                            <img class="circle"
                                                src="${image}">
                                        </a>
                                        <span class="text-center mt-2">이름 : <strong>${membername}</strong></span>
                                        <span class="text-center mt-2">mbti : ${mbti}</span>
                                    </div>`
                    $('#memberbox2').append(temp_html)
                })
            })
        }
    </script>
</head>

<body>
    <div class="container mt-5">
        <!-- header start -->
        <header class="">
            <a href="/" class="d-inline">소개하조</a>
            <a href="/" class="d-inline h1">우리는 소개하조</a>
            <nav class="" style="background-color: green;">
                <ul class="myMenu mt-1 d-flex justify-content-center align-items-center">
                    <a href="/">
                        <li class="me-5">메인</li>
                    </a>
                    <li class="ms-5 menu2">팀원소개
                        <ul class="menu2_s submenu">
                            <a href="#">
                                <li>김예성</li>
                            </a>
                            <a href="#">
                                <li>서해민</li>
                            </a>
                            <a href="#">
                                <li>김인서</li>
                            </a>
                            <a href="#">
                                <li>김준영</li>
                            </a>
                            <a href="#">
                                <li>주학준</li>
                            </a>
                        </ul>
                    </li>
                </ul>
            </nav>
        </header>
        <!-- header end -->
        <h2 class=" text-center welcome">환영합니다!</h2>
        <div class="memberbox-1" id="memberbox">
            <div class="members-1  d-flex justify-content-center" id="memberbox2">
                <div class="member mx-auto d-flex flex-column">
                    <a href="#">
                        <img class="circle"
                            src="https://flexible.img.hani.co.kr/flexible/normal/640/664/imgdb/original/2023/0515/20230515500847.jpg">
                    </a>
                    <span class="text-center mt-2">이름 : <strong></strong></span>
                    <span class="text-center mt-2">mbti : </span>
                </div>
                <div class="member mx-auto d-flex flex-column">
                    <a href="#">
                        <img class="circle"
                            src="https://flexible.img.hani.co.kr/flexible/normal/640/664/imgdb/original/2023/0515/20230515500847.jpg">
                    </a>
                    <span class="text-center mt-2">이름 : <strong></strong></span>
                    <span class="text-center mt-2">mbti : </span>
                </div>
                <div class="member mx-auto d-flex flex-column">
                    <a href="#">
                        <img class="circle"
                            src="https://flexible.img.hani.co.kr/flexible/normal/640/664/imgdb/original/2023/0515/20230515500847.jpg">
                    </a>
                    <span class="text-center mt-2">이름 : <strong></strong></span>
                    <span class="text-center mt-2">mbti : </span>
                </div>
            </div>
            <div class="members-2 mx-5 d-flex justify-content-center mt-5">
                <div class="member mx-auto d-flex flex-column">
                    <a href="#">
                        <img class="circle"
                            src="https://flexible.img.hani.co.kr/flexible/normal/640/664/imgdb/original/2023/0515/20230515500847.jpg">
                    </a>
                    <span class="text-center mt-2">이름 : <strong></strong></span>
                    <span class="text-center mt-2">mbti : </span>
                </div>
                <div class="member mx-auto d-flex flex-column">
                    <a href="#">
                        <img class="circle"
                            src="https://flexible.img.hani.co.kr/flexible/normal/640/664/imgdb/original/2023/0515/20230515500847.jpg">
                    </a>
                    <span class="text-center mt-2">이름 : <strong></strong></span>
                    <span class="text-center mt-2">mbti : </span>
                </div>
            </div>
        </div>
    </div>
    <footer></footer>
</body>

</html>

2. python

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

from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:test@cluster0.ue8jxhg.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta

import requests
from bs4 import BeautifulSoup

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


@app.route("/members", methods=["GET"])
def members_get():
    all_members = list(db.project_2.find({},{'_id':False}))
    return jsonify({'result':all_members})

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

오류 내용 및 수정해야 할 사항

  • temp_html을 사용하여 db를 불러오는 과정에서 레이아웃이 깨지는 상황이 발생함.
  • 메인페이지 레이아웃을 조금 수정해야 할 듯

 


느낀점

오늘 드디어 내일배움캠프가 개강했다.

9 to 9로 공부하는게 정말 쉽지 않았고, 프로젝트를 하면서 여러가지 어려움을 겪었다.

 

아직 당연히 많이 부족한걸 알기 때문에 항상 배운다는 입장으로 부끄러워하지말고 질문하자.