TIL_240129

라미·2024년 1월 29일

TIL

목록 보기
5/25
post-thumbnail

멜로디쉐어 마무리, 배포하기

$ source .venv/Scripts/activate : 가상환경 활성화 명령어
$ pip list : 사용중인 lib list
$ pip freeze > requirements.txt : 사용중인 lib 'requirements.txt' 으로 .txt 파일로 목록 생성

멜로디쉐어에 음악 추가 기능 추가

form 을 통한 데이터 전송

  • submit 이 일어나면 music_create() 함수 실행, 이때 데이터를 get 방식으로 전송
    <form action=" {{url_for('music_create')}}" method="get">
  • 사용자 입력 데이터 전송시 데이터 전송 이름을 username 으로 전송한다
    <input type="text" name="username">

DB와 연결 및 데이터 저장

# db 기본 코드 app.py 추가(db와 연결)
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()

#form 에서 넘겨준 데이터 db에 저장
@app.route("/music/create/")
def music_create():
    # form에서 보낸 데이터 받아오기(사용자 입력 데이터)
    username = request.args.get("username")
    title = request.args.get("title")
    artist = request.args.get("artist")
    image = request.args.get("image")

    # 데이터 db에 저장하기
    # db에 저장하기 위해 객체로 저장
    song = Song(username = username, title = title, artist = artist, image_url = image )
    # db 세션에 저장
    db.session.add(song)
    # db에 완전 commit
    db.session.commit()

    return render_template('music.html')

# db에 저장된 데이터 불러오기
@app.route("/music")
def music():
    # db에 있는 모든 데이터 song_list에 저장
    song_list = Song.query.all()

    return render_template('music.html', data = song_list)

# app.py
# serch(조건을 줘서)데이터 가져오기
@app.route("/music/<username>/")
def render_music_filter(username):
    
    # username 서치하여 list 가져오기
    filter_list = Song.query.filter_by(username=username).all()

    return render_template('music.html', data = filter_list)
@app.route("/music/create/")
def music_create():
...
    # return render_template('music.html')
    # 음악 추가 후 추천인이 추가한 것만 보이도록 페이지 redirect 할 수 있도록 변경
    # 데이터 추가 후 redirect 해준다 render_music_filter로 username을 가지고
    return redirect(url_for('render_music_filter', username = username))

Pythonanywhere를 통한 배포하기

Pythonanywhere 회원가입 : https://www.pythonanywhere.com/

1. Open Web tab 클릭

2. Add a new Web app 클릭

3. 사용하는 web framwork 선택

4. Python 버전 선택

5. project.zip 파일 업로드

project.zip / lib_list, app.py, db, templates 압축한 파일

6. consol 창에서 파일 압축 해제 및 가상환경설정

03:15 ~/mysite $ ls #파일 목록 확인
Project.zip  __pycache__  flask_app.py
03:17 ~/mysite $ unzip Project.zip #파일 압축 풀기
Archive:  Project.zip
  inflating: app.py                  
  inflating: database.db             
  inflating: requirements.txt        
   creating: templates/
  inflating: templates/motto.html    
  inflating: templates/music.html  
03:18 ~/mysite $ ls #압축해제 확인
Project.zip  __pycache__  app.py  database.db  flask_app.py  requirements.txt  templates
03:18 ~/mysite $ python -m venv venv #python 가상환경 생성
03:20 ~/mysite $ source venv/bin/activate #가상환경 활성화
(venv) 03:20 ~/mysite $ pip install -r requirements.txt #목록에 있는 lib 설치

7. web-Virtualenv: 경로 설정


og 태그 설정

<!--motto.html head 끝부분 추가-->
<meta property="og:title" content="내 사이트의 제목" />
<meta property="og:description" content="보고 있는 페이지의 내용 요약" />
<meta property="og:image" content="이미지URL" />
</head>

적용후 링크 보냈는데 반영 안된다면 공유디버거 들어가서 캐시 초기화 해주면 됨.
https://developers.kakao.com/tool/debugger/sharing

전, 후 사진

배포 완료 된 사이트
https://rami.pythonanywhere.com/

0개의 댓글