항해 4일차

문제 - 공통된 페이지가 아닌 고유한 페이지 만들기

사실 오늘 멘탈이 아주 박살이 나 버려서 강의를 듣는 둥 마는 둥 했다. 그냥 처음부터 강의를 바짝 들었으면 굉장히 빨리 해결될 문제였는데, 시간을 너무 허비했다.

  1. HTML에 DB 조회 결과 전달
@app.route('/')
def home():
    postings = list(db.postings.find({}))
    for posting in postings:
        posting["_id"] = str(posting["_id"])
    return render_template('main.html', postings=postings)
  1. Jinja로 템플릿 표현, DB 조회 결과에 접근
<div class="list-grid" id="thriller-grid">
	{% for posting in postings %}
            {% if ("스릴러" in posting["genres"]) %}
            {% set imgUrl = posting["imageUrl"]%}
            {% set url = posting["url"]%}
            <a href="/detail/{{posting['_id']}}">
                <img src="{{imgUrl}}" alt=""></a>
            {% endif %}
        {% endfor %}
        </div>

여기서 포인트는, a태그 href 속성. a태그 클릭을 하면 브라우저가 서버로 get 요청을 보낸다.

  1. 서버 측에서 url과 url 변수를 받아서 처리
@app.route('/detail/<postingId>')
def detail(postingId):
    print(postingId)
    token_receive = request.cookies.get('mytoken')
    try:
        payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
        posting = db.postings.find_one({"_id": ObjectId(postingId)})
        # 좋아요 수 변경
        # print(posting)
        return render_template('detail.html', posting=posting)
    except (jwt.ExpiredSignatureError, jwt.exceptions.DecodeError):
        return redirect(url_for("login"))

<> 안의 값을 바로 변수로 받을 수 있다. 함수 정의할 때 인자로 다시 적어줄 것.
이 후 해당 url에 대해 detail.html 템플릿을 던져준다. Jinja로 템플릿을 표현해야 하니까 postingId로 조회한 결과도 같이 던져준다.

TIL
1. 업무 프로세스 조율의 중요성
- 각자 바라보는 방향이 다르고 생각하는 것이 다르다.
- 명확한 스코프, 개발 일정이 중요한 것 같다.
2. 밤샘 코딩은 자제할 것
- 컨디션 저조로 인해 잃는 것이 밤샘으로 얻는 것보다 많은 것 같다.

좋은 웹페이지 즐겨찾기