여러개의 파일구조로 나눴을 때 __init__.py

Nam Eun-Ji·2020년 11월 28일
0
├── app
│   ├── __init__.py
│   ├── config.py
│   └── namespace.py
├── credentials.py
├── endpoint
│   ├── __init__.py
│   └── test
│       ├── endpoint.py
│       ├── model.py
│       └── view.py
├── run.py

① 위와 같이 파일구조를 나누고

② endpoint/test/endpoint.py에 api를 작성한 후

③ run.py를 실행 후

④ 해당 api를 호출하면 404에러가 뜨고 제대로 실행되지 않는다.

# app/__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_restplus import Api, Resource
from app.config import configs

app = Flask(__name__)
app.config.from_object(configs['dev'])
db = SQLAlchemy(app)
api = Api(app, version='1.0', title='Test', description='Test simple API', prefix='/api/v1')
# endpoint/test/endpoint.py
from app import api
from flask_restplus import Resource

@api.route('/test')
class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}
# run.py
from app import app
import endpoint

if __name__ == '__main__':
    app.run()


결론부터 말하자면,
endpoint/__init__.py 에 하위 디렉토리를 import 해주면 끝.

# endpoint/\__init__.py
from endpoint.test import endpoint
  1. 플라스크 어플리케이션 객체 생성은 __init__.py 파일에서 해야한다. 그런 방식으로 개별 모듈은 안전하게 포함되고 __name__ 변수는 알맞은 패키지로 해석될 것이다.

  2. 모든 뷰 함수들은(함수의 선언부 위에 route() 데코레이터(decorator)를 가진 함수)는 __init__.py 파일에 임포트되어야 하는데, 객체가 아닌 함수가 있는 모듈을 임포트해야한다. 어플리케이션 객체를 생성한 후에 뷰 모듈을 임포트해야한다.

profile
한 줄 소개가 자연스러워지는 그날까지

0개의 댓글