Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

main/__init__.py 에 app 정의부분 수정 #2

Open
hurcy opened this issue Feb 21, 2020 · 3 comments
Open

main/__init__.py 에 app 정의부분 수정 #2

hurcy opened this issue Feb 21, 2020 · 3 comments

Comments

@hurcy
Copy link
Member

hurcy commented Feb 21, 2020

현재는 main 모듈을 import 하는 것만으로 실행이 되기 때문에
app을 정의하는 부분을 함수로 감싸주고, 정의시 호출하는 것이 나은것 같습니다.
import 하는 순서에 따라 초기화 되지 않은 app 변수에 접근하는 경우를 방지할 수 있습니다.

간단한 예시: https://flask.palletsprojects.com/en/1.0.x/tutorial/factory/
현재 사용중인 예시: http://yona.linewalks.com/MDwalks_for_CDM/MDwalks-EXI-Cardio/code/develop/backend/main/__init__.py

@westhyena
Copy link
Member

EXI 소스코드를 보고 EXI-Serving 서버도 이런식으로 구현했는데,
전 함수위에 db, jwt, docs 등을 정의 해놓는게 참 맘에 안들더라고요.

app만 가지고 모든 걸 해결할 수 있다면 저 방법으로 해결하면 좋겠지만, 실제로 구현시는 app보다 db, jwt 등을 더 많이 쓰게되니 더 좋고 깔끔한 다른 방법을 생각해보았으면 좋겠습니다.

@hurcy
Copy link
Member Author

hurcy commented Feb 21, 2020

저도 그게 100% 맘에 들지는 않았습니다. 선언 위치에 상관없이 사용할 수 있음 좋겠어요.
exi는 jwt 인증한 사용자를 g.user에 저장하여 사용하고 있습니다. 다른 객체도 가능해보입니다.
https://flask.palletsprojects.com/en/1.0.x/appcontext/#storing-data

@hurcy
Copy link
Member Author

hurcy commented Feb 27, 2020

flask extension은 기본적으로 생성자에 (app)을 넣거나, init_app(app)으로 연결하도록 되어있습니다.
함수 상단에 db, jwt의 연결전 객체를 놓은건 2가지 목적을 위한것이었어요.

  • 정적 지원: 프로그래밍 시 다른 모듈에서 import 할 수는 있게 한다.
  • 동적 지원: 실행 시 create_app() 호출 후에 사용하게 된다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants