커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
5-4 [멜로디쉐어] - 최애곡 보여주기
[GPT] 웹개발 종합반 v0
5주차
북마크
댓글
17
추천
0
조회수
18
조회수
18
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.



무슨 문제가 있길래 3:59 부분이랑 다를까요ㅠ

# 필수 라이브러리
'''
0. Flask : 웹서버를 시작할 수 있는 기능. app이라는 이름으로 플라스크를 시작한다
1. render_template : html파일을 가져와서 보여준다
'''
from flask import Flask, render_template, request
app = Flask(__name__)


import os
from flask_sqlalchemy import SQLAlchemy


basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] =\
        'sqlite:///' + os.path.join(basedir, 'database.db')


db = SQLAlchemy(app)


class Song(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(100), nullable=False)
    artist = db.Column(db.String(100), nullable=False)
    title = db.Column(db.String(100), nullable=False)
    image_url = db.Column(db.String(10000), nullable=False)


    def __repr__(self):
        return f'{self.username} {self.title} 추천 by {self.username}'


with app.app_context():
    db.create_all()


@app.route("/")
def home():
    name = '최지웅'
    motto = "행복해서 웃는게 아니라 웃어서 행복합니다."


    context = {
        "name": name,
        "motto": motto,
    }
    return render_template('motto.html', data=context)


@app.route("/music/")
def music():
  song_list = Song.query.all()
  return render_template('music.html', data=song_list)


@app.route("/iloveyou/<name>/")
def iloveyou(name):
    motto = f"{name}야 난 너뿐이야!"


    context = {
        'name': name,
        'motto': motto,
    }
    return render_template('motto.html', data=context)
  
@app.route('/music/create/')
def music_create():
    username_receive = request.args.get('username')
    title_receive = request.args.get('title')
    artist_receive = request.args.get('artist')
    image_receive = request.args.get('image_url')
    
    song = Song(username=username_receive, title=title_receive, artist=artist_receive, image_url=image_receive)
    db.session.add(song)
    db.session.commit()
    return render_template('music.html')


if __name__ == "__main__":
    app.run(debug=True)




<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Bootstrap demo</title>
    <style>
      @import url("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css");


      .background-banner {
        background-image: linear-gradient(
            45deg,
            rgb(51 43 43 / 75%),
            rgb(20 19 20 / 61%)
          ),
          url("https://s3.ap-northeast-2.amazonaws.com/materials.spartacodingclub.kr/webjong/images/music_festival.jpg");
        max-height: 100%;
        background-position: center;
        background-size: cover;
        background-repeat: no-repeat;
        background-attachment: fixed;
      }
    </style>
    <link
      rel="stylesheet"
      href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css"
    />
    <link
      href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css"
      rel="stylesheet"
      integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM"
      crossorigin="anonymous"
    />
  </head>


  <body data-bs-theme="dark">
    <div class="background-banner">
      <nav
        class="navbar border-bottom border-bottom-dark d-flex justify-content-space-between"
        data-bs-theme="dark"
      >
        <div class="ms-3">
          <img
            src="https://s3.ap-northeast-2.amazonaws.com/materials.spartacodingclub.kr/webjong/images/sparta-logo.svg"
            alt=""
          />
        </div>
        <nav class="navbar navbar-expand-lg">
          <div class="container-fluid">
            <button
              class="navbar-toggler"
              type="button"
              data-bs-toggle="collapse"
              data-bs-target="#navbarNav"
              aria-controls="navbarNav"
              aria-expanded="false"
              aria-label="Toggle navigation"
            >
              <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarNav">
              <ul class="navbar-nav">
                <li class="nav-item">
                  <a
                    class="nav-link text-white"
                    aria-current="page"
                    href="{{ url_for('home')}}"
                    >Home</a
                  >
                </li>
                <li class="nav-item">
                  <a class="nav-link text-white" href="{{ url_for('music')}}"
                    >Music</a
                  >
                </li>
                <li class="nav-item">
                  <a class="nav-link text-white" href="#">Album</a>
                </li>
                <li class="nav-item">
                  <a class="nav-link text-white">Movie</a>
                </li>
              </ul>
            </div>
          </div>
        </nav>
      </nav>


      <div class="px-4 py-5 my-5 text-center">
        <h1 class="display-5 fw-bold text-body-emphasis">멜로디 쉐어</h1>
        <div class="col-lg-6 mx-auto">
          <p class="lead mb-4">
            <br />
            노래를 들으면 생각나는 누군가가 있으신가요?
            <br /><br />
            당신의 감성이 담긴 인생곡 플레이리스트
            <br />
            멜로디쉐어에서 소중한 사람과 함께 공유하세요.
          </p>
          <div class="d-grid gap-2 d-sm-flex justify-content-sm-center">
            <!-- Button trigger modal -->
            <button
              type="button"
              class="btn btn-danger"
              data-bs-toggle="modal"
              data-bs-target="#exampleModal"
            >
              음악 추가
            </button>
          </div>
        </div>
      </div>


      <!-- Modal -->
      <div
        class="modal fade"
        id="exampleModal"
        tabindex="-1"
        aria-labelledby="exampleModalLabel"
        aria-hidden="true"
      >
        <div class="modal-dialog">
          <div class="modal-content">
            <div class="modal-header">
              <h1 class="modal-title fs-5" id="exampleModalLabel">최애 음악</h1>
              <button
                type="button"
                class="btn-close"
                data-bs-dismiss="modal"
                aria-label="Close"
              ></button>
            </div>
            <div class="modal-body">
              <form action="{{url_for('music_create')}}" method="get">
                <div class="mb-3">
                  <label for="exampleInputEmail1" class="form-label"
                    >유저</label
                  >
                  <input
                    type="text"
                    class="form-control"
                    id="exampleInputEmail1"
                    aria-describedby="emailHelp"
                    name="username"
                  />
                  <div id="emailHelp" class="form-text">
                    사용자(추천인)의 이름을 넣어주세요.
                  </div>
                </div>
                <div class="mb-3">
                  <label for="exampleInputPassword1" class="form-label"
                    >노래 제목</label
                  >
                  <input
                    type="text"
                    class="form-control"
                    id="exampleInputPassword1"
                    name="title"
                  />
                  <div id="emailHelp" class="form-text">
                    좋아하는 노래 제목을 넣어주세요.
                  </div>
                </div>
                <div class="mb-3">
                  <label for="exampleInputPassword1" class="form-label"
                    >가수</label
                  >
                  <input
                    type="text"
                    class="form-control"
                    id="exampleInputPassword1"
                    name="artist"
                  />
                </div>
                <div class="mb-3">
                  <label for="exampleInputPassword1" class="form-label"
                    >앨범 커버URL</label
                  >
                  <input
                    type="text"
                    class="form-control"
                    id="exampleInputPassword1"
                    name="image_url"
                  />
                </div>
                <button type="submit" class="btn btn-danger">Submit</button>
              </form>
            </div>
          </div>
        </div>
      </div>


      <div class="row row-cols-1 row-cols-md-4 g-4 mx-auto w-75 pb-5">
        {% for song in data %}
        <div class="col">
          <div class="card h-100">
            <img
              src="{{song.image_url}}"
              class="card-img-top"
              alt="..."
            />
            <div class="card-body">
              <h5 class="card-title">{{song.title}}</h5>
              <p class="card-text">{{song.artist}}</p>
              <p class="card-text">추천 by {{song.username}}</p>
            </div>
          </div>
        </div>
        {% endfor %}
        
        
        
          <div class="card h-100">
            <img
              src="https://s3.ap-northeast-2.amazonaws.com/materials.spartacodingclub.kr/webjong/ive.jpg"
              class="card-img-top"
              alt="..."
            />
            <div class="card-body">
              <h5 class="card-title">Love Dive</h5>
              <p class="card-text">아이브(IVE)</p>
              <p class="card-text">추천 by 최지웅</p>
            </div>
          </div>
        </div>
      </div>
    </div>


    <div class="container">
      <footer>
        <div
          class="d-flex flex-column flex-sm-row justify-content-between py-4 my-4 border-top"
        >
          <p>© 2023 Company, Inc. All rights reserved.</p>
          <ul class="list-unstyled d-flex">
            <li class="ms-3">
              <a
                class="link-body-emphasis"
                href="https://www.youtube.com/@SpartaCodingClub"
                ><i class="bi bi-youtube"></i
              ></a>
            </li>
            <li class="ms-3">
              <a
                class="link-body-emphasis"
                href="https://www.instagram.com/spartacodingclub/"
                ><i class="bi bi-instagram"></i
              ></a>
            </li>
            <li class="ms-3">
              <a
                class="link-body-emphasis"
                href="https://spartacodingclub.kr/blog"
                ><i class="bi bi-postcard"></i
              ></a>
            </li>
          </ul>
        </div>
      </footer>
    </div>


    <script
      src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"
      integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz"
      crossorigin="anonymous"
    ></script>
  </body>
</html>






취소
 공유
취소
댓글 0
댓글 알림
나의얼굴