본문 바로가기

내일배움캠프_개발일지/내일배움캠프_미니프로젝트

미니 프로젝트 - 화면 구현 1

import json

import os

 

 

from flask import Flask, render_template, request, jsonify, redirect, url_for, session

import pymysql

import pymysql.cursors

 

app = Flask(__name__)

app.secret_key = "ThisIsSecretKeyOfSession"

 

 

@app.route('/')

def home():

    if "login_name" in session:

        return render_template('main.html')

    else:

        return render_template('login.html')

 

 

@app.route('/main')

def main():

    return render_template('main.html')

 

 

# main 에서 포스트 클릭 시 상세 페이지로.

@app.route('/detail', methods=["GET", "POST"])

def detail():

 

    if session.get("login_name") is None:

        return redirect(url_for("home"))

 

    post_id_receive = int(request.args.get("post"))

    print('무사히 접근. ', post_id_receive)

 

    # 해당 포스트의 디테일

    db = pymysql.connect(host="localhost", port=3306, user="root", db='sparta_test', password='1q2w3e4r',

                         charset='utf8')

    cur = db.cursor(pymysql.cursors.DictCursor)

    sql = "SELECT vp.id, vp.title, vp.content, vp.login_name, vp.user_id, u.name, u.email, u.nick_name, u.blog_name, u.profile_img, u.intro_myself FROM velog_post AS vp INNER JOIN users AS u ON vp.user_id = u.id WHERE vp.id = %s;"

    cur.execute(sql, post_id_receive)

    post_detail_result = cur.fetchall() # [{}] 배열의 0번째 인덱스에 딕셔너리 형태로 1개.

    db.close()

 

    # 해당 포스트에서 사용된 이미지

    db = pymysql.connect(host="localhost", port=3306, user="root", db='sparta_test', password='1q2w3e4r',

                         charset='utf8')

    cur = db.cursor(pymysql.cursors.DictCursor)

    sql = "select * from velog_post_img where post_id = %s"

    cur.execute(sql, post_id_receive)

    img_result = cur.fetchall()         #   0개 일 경우 ()  이렇게 빈 튜플로 나와.

    db.close()                          # 1개 이상일 경우, [{}, {}] 이렇게 배열 안에 레코드가 차례대로.

 

    doc = {"detail": post_detail_result[0]}

    if img_result != ():

        doc["images"] = img_result

 

    return render_template('detail.html', detailDict=doc)

 

 

# detail 화면이 처음 구성된 직후, 이전 글과 이후 글에 대한 정보를 가져올거야

@app.route("/otherDetail", methods=["POST"])

def other_detail():

    user_id_receive = int(request.form["user_id_give"])

    post_id_receive = int(request.form["post_id_give"])

 

    print(f'user_id_receive : {type(user_id_receive)}, {user_id_receive}')

    print(f'post_id_receive : {type(post_id_receive)}, {post_id_receive}')

 

    # 이전 글의 post_id 가져오기

    db = pymysql.connect(host="localhost", port=3306, user="root", db='sparta_test', password='1q2w3e4r',

                         charset='utf8')

    cur = db.cursor(pymysql.cursors.DictCursor)

    sql = "SELECT id, title FROM velog_post vp WHERE user_id = %s AND id = (SELECT max(id) FROM velog_post vp2 WHERE user_id = %s AND id < %s);"

    cur.execute(sql, (user_id_receive, user_id_receive, post_id_receive))

    post_detail_before = cur.fetchall()  # [{}] 배열의 0번째 인덱스에 딕셔너리 형태로 1개.

    db.close()

 

    # 이후 글의 post_id 가져오기

    db = pymysql.connect(host="localhost", port=3306, user="root", db='sparta_test', password='1q2w3e4r',

                         charset='utf8')

    cur = db.cursor(pymysql.cursors.DictCursor)

    sql = "SELECT id, title FROM velog_post vp WHERE user_id = %s AND id = (SELECT min(id) FROM velog_post vp2 WHERE user_id = %s AND id > %s);"

    cur.execute(sql, (user_id_receive, user_id_receive, post_id_receive))

    post_detail_next = cur.fetchall()  # [{}] 배열의 0번째 인덱스에 딕셔너리 형태로 1개.

    db.close()

 

    ##### 값이 없을 경우 () 이렇게 튜플로 나와.

    print(post_detail_before, '//', post_detail_next)

 

    doc = {

        "before": post_detail_before,

        "after": post_detail_next

    }

 

    return jsonify({'msg': 'detail 이전, 이후 get!', "result": doc})