Sparta/Today I Learned

TIL 15) 2022.05.06 (금) | 인스타 클론 코딩 팀플 3 일차

LULULALA_ 2022. 5. 6. 22:45

오늘의 작업내용

  • 피드 불러오기 기능 구현 (로그인 기능 제외)
  • 이미지 미포함

[app.py]

@app.route('/feed', methods=['GET']) # url /feed 페이지에 get방식으로 함수 호출
def getFeed():
  # 피드 조회하기
  posts = list(db.posts.find({}).sort("post_date", -1).limit(20))
  # 변수 posts에 db 테이블 중 posts라는 테이블에서 데이터들을 찾아와서 리스트로 만들어 담아라
  # 데이터들은 post_date를 내림차순으로(최신순) 정렬해라
  # 정렬된 데이터들을 앞에서부터 20개만 가지고 와라

  for post in posts:
  # posts라는 리스트에서 내용물이 없을 때까지 post를 하나씩 꺼내라

    # 데이터 타입을 바꿔줌
    post["_id"] = str(post["_id"]) # 꺼내지는 post에 "_id"의 value를 문자열로 바꿔라
    post["post_date"] = str(post["post_date"]) # 꺼내지는 post에 "post_date"의 value를 문자열로 바꿔라

  return jsonify({'posts': posts, 'result':'success'})
  # 딕셔너리 안에 든 key, value 값을 json형태로 데이터로 만들어서 리턴해준다
  • @app.route(/) : 플라스크에서 지원하는 데코레이터(http://localhost:5000/ - 플라스크에서 기본적으로 5000포트 사용)
  • @ 데코레이터(장식자) : 메인 함수를 고치지 않고 장식자를 붙여서 메인함수에 넣을 반복적이고 부가적인 내용을 더해주는 것
  • jsonify : 괄호 안에 들어간 키값, value값을 json 형태로 같이 데이터로 넣는다
// ... 피드 불러오기
function getFeed() {
    $("#card_box").empty() // ... 피드를 붙여주기 전에 카드박스를 비워줌
    
    // ... jQuery를 이용한 ajax 사용
    $.ajax({	// ajax 선언
        type: "GET",	// (통신방식) GET 전송방식으로 서버에 전송[조회]
        url: "/feed",	// 서버로 보낼 url
        data: {},	// 서버로 보낼 데이터 정의
        success: function (response) {
        // 데이터 요청이 성공했을 때 실행되는 function(response)는 서버에서 보낸 리턴 값
        // 'response'에 서버에서 보낸 값이 담겨있음
            if (response["result"] == "success") {
            // (조건)response에 담아온 'result'라는 key값에 'success'라는 value가 있으면
                let posts = response["posts"]
                // 'posts'변수에 response 안에 있는 'posts' 키값의 value를 담아라
                for (let i = 0; i < posts.length; i++) {
                // (반복) 변수 'i'는 0임을 선언
                // 반복문이 한번 실행될때마다 'i'에 1씩 더하고 posts의 길이 만큼 반복되면 종료
                
                    let post = posts[i]	// 변수'post'에 리스트'posts' 안에 있는 i번째 리스트값을 넣어라 
                    let post_date = new Date(post["post_date"])
                    // 변수 'posts_date'에 리스트 'post' 안의 'post_date'라는 키값이 가진 value로 Date 객체를 만들어라
					
                    //`` 사이에 template을 넣어 정의
                    let html_temp_img = `<div class="card">
                                            <!--게시글 헤더-->
                                            <div class="card-body">
                                                <div class="card_header">
                                                    <div class="human"></div>
                                                    <div class="nickname">${post['user_id']}<br><span class="gray_s">${post['location']}</span></div>
                                                </div>
                                                <button class="dot-dot-dot btn-open-popup" onclick="popOpen()"></button>
                                            </div>
                                            <!--게시글 이미지-->
                                            <img src="../static/img/post_3.jpg" class="card-img-top post_img">
                                            <!--게시글 이미지 하단 아이콘-->
                                            <div class="post_icon">
                                                <div class="post_icon_left">
                                                    <div class="like"></div>
                                                    <div class="comment"></div>
                                                    <div class="direct"></div>
                                                </div>
                                                <div class="post_icon_right">
                                                    <div class="bookmark"></div>
                                                </div>
                                            </div>
                                            <!--댓글 본문-->
                                            <div class="box">
                                                    <p><span class="bold">좋아요 3개</span></p>
                                                    <div class="feed-information">
                                                        <span class="id">${post['user_id']} </span>
                                                        <span class="feed-content black">${post['desc']}</span>
                                                    </div>
                                                    <div class="click gray_r" id="comments">댓글 보기</div>
                                                    <br><div class="gray_s">${post['post_date']}</div>
                                                </div>
                                            <!--댓글 달기-->
                                            <ul class="list-group list-group-flush">
                                                <ul class="list-group list-group-flush">
                                                    <li class="list-group-item">
                                                        <div class="emoji"></div>
                                                        <input type="text" onkeyup="inputComment(this)" class="reply" placeholder="댓글 달기...">
                                                        <button type="button" disabled="false" onclick="postComment()" class="btn btn-outline-info btn-sm">게시</button>
                                                    </li>
                                                </ul>
                                            </ul>
                                        </div>`
                   
                    $("#card_box").append(html_temp_img)
                    // id가 card_box인 div에 html_temp_img라는 것을 추가해라
                }
            }
        }
    })
}
  •  jQuery를 이용한 ajax사용
  • HTML template : 반복적인 HTML부분을 template으로 만들어두고, 서버에서 온 data(주로 json)을 결합해서, 화면에 추가하는 작업 ( HTML template + JSON data ) // 백틱(``) 사이에 있는 부분이 반복적으로 붙여넣을 template

 

REFERANCE

  • ajax : https://java119.tistory.com/4?category=809224