상황


  • DELETE API를 호출하여 게시글을 삭제하려고 하는데 계속해서 오류가 발생함..
  • 문제점의 원인을 찾아보니 하나의 db 세션이 사용중인 경우에는 사용할수 없다고 함.. 그런데 애초에 여러개의 db 세션을 만든 적이 없는데..?? 해서 찾아봄

문제 원인


  • Market.py와 Models.py에서 서로 import해주는 이유로 생기는 문제로 확인
    • Market.py에 app와 db가 있고 url 라우팅 존재
    • Models.py에 db.model을 상속받는 모델들 존재
  • 따라서, 따로 config.py를 두어서 config에 db와 app를 두고 Models.py와 Market.py가 config에 있는 db와 app를 사용하도록 하면 서로 import해주지 않으므로 문제 해결

Config.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///Market.sqlite3'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)

결론

  • 순환 구조로 import하는걸 지양하자

'프레임워크 > Flask' 카테고리의 다른 글

[ Flask ] 파일 불러오기  (0) 2021.12.24

유저가 업로드한 프로필 이미지를 사용해야 하는데, 업로드된 이미지을 불러오는 기능을 어떻게 구현해야 할 까 해서 찾아보게 된 방식임. 대부분 정적 파일을 관리하는 또다른 서버를 둔다고 하지만 개발 단계에서의 이미지 업로드 / 이미지 표시를 해보아야 하므로 이미지 표시 기능을 따로 구현

 

1. 업로드 된 파일을 가져오는 파트


- Flask의 send_from_directory 메서드 사용

- 첫번째 인자는 폴더, 두번째 인자는 파일 이름

- 해당 리소스를 전송시켜준다.

 

@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return send_from_directory('uploaded', filename)

 

2. HTML에서 이미지를 불러오는 파트


- url_for 메서드를 사용하면 첫번째 인자인 함수 이름을 가진 url을 리턴받을 수 있음.

- 두번째 인자부터는 키워드 인자로 변수 규칙에 맞추어서 대입된 url을 받아올 수 있음.

- 따라서, 아래 코드에서의 url_for의 결괏값은 uploads/eagle.jpg이다.

<image class="itemimage" src="{{ url_for('uploaded_file', filename='eagle.jpg') }}"></image>

 

'프레임워크 > Flask' 카테고리의 다른 글

[ Error ] [ SQLAlchemy ] is already attached to session  (0) 2021.12.29

+ Recent posts