質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

Q&A

解決済

1回答

9859閲覧

flaskで開発するRESTfulAPIのディレクトリ構成をどう決めていくか?

sequelanonymous

総合スコア123

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

0グッド

1クリップ

投稿2018/07/31 04:53

以下、web上で諸々調査してもってきたflaskでつくるときのディレクトリ構成の例になります。私がつくっているので10数本のAPIからなるシステムです。その場合、どの事例を真似てディレクトリ構成を検討すべきか悩んでいます。

より良いディレクトリ構成はどのようにすればよいか?
もしくは、それぞれの良いところ、悪いところなど、諸々ご意見頂けると嬉しいです。また、各ファイルの命名の仕方が迷っていたりします。例えば、以下、アルゴリズムの処理コードが記載されたmodelとdbのモデルが記載されているmodelsは混合してしまうので命名を変更する必要があるのかなと思っています。

また、サンプル5にあるようにdbのモデルは、各テーブルごとにファイル分けして作る必要があるのかどうか迷っています(テーブル数は20もないぐらいです。)

私が作っているAPIのディレクトリ構成の現状

. ├── Dockerfile ├── Makefile ├── README.md ├── __pycache__ │   └── conftest.cpython-36-PYTEST.pyc ├── app_production.yaml ├── app_staging.yaml ├── auth │   └── dev-f0996c06c4df.json ├── application_name │   ├── __init__.py -- エンドポイント │   ├── __pycache__ │   ├── auth │   ├── common │   ├── config │   ├── data  │   ├── model -- 計算処理のアルゴリズム │   ├── models -- dbのモデル(models.pyの一つのファイルに書いている) │   ├── task │   └── url -- 各エンドポイント先の処理コード ├── conftest.py ├── cron.yaml ├── docker-compose.yaml ├── manage.py ├── requirements.txt ├── setup.cfg ├── setup.py ├── test.egg-info │   ├── PKG-INFO │   ├── SOURCES.txt │   ├── dependency_links.txt │   ├── not-zip-safe │   └── top_level.txt └── tests      -- テストコード ├── __pycache__ ├── test_ac.py └── test_au.py

サンプル1(https://qiita.com/rarewin/items/8f252313db8ee7fa2de0)

config.py requirements.txt run.py instance/ config.py yourapp/ __init__.py views.py models.py forms.py static/ templates/ 各ファイル/ディレクトリについては、以下の表のような感じだそうです。 ファイル/ディレクトリ名 使い方 run.py 開発用サーバの実行用スクリプトでプロダクション用としては使わない requirements.txt 依存するパッケージを書く config.py 設定変数を格納したファイル /instance/config.py APIキーやデータベースのURIなど、バージョン管理に含めない設定変数を格納したファイル /yourapp/ アプリの格納用 /yourapp/__init__.py アプリの初期化用スクリプトで、様々なコンポーネントを読み込む /yourapp/view.py or /yourapp/views/ routeを定義するファイルもしくはディレクトリ /yourapp/models.py or /yourapp/models/ アプリのモデル(のクラス)を定義するファイルもしくはディレクトリ /yourapp/forms.py (or /yourapp/forms/ ? ) フォームの定義をするファイル(もしくはディレクトリ?) (なぜかこれだけ参考サイトの表からディレクトリが消えてました) /yourapp/static/ 公開用のCSS, JavaScript, 画像等のアプリで公開すべきファイル置き場 /yourapp/templates Jinja2テンプレートを置くんだ (なぜJinja2決めうちなんざましょ……)

サンプル2(https://stackoverflow.com/questions/30771387/flask-restful-project-structure)

/myproject README.md runserver.py /myproject __init__.py api.py /resources __init__.py foo.py bar.py /common __init__.py db.py /tests test_myproject.py

サンプル3(https://github.com/yoshiya0503/Hermetica/wiki/02-%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E6%A7%8B%E6%88%90)

application/ |- server.py #サーバの起動スクリプト |- tasks.py # バッチのインターフェースやタスクランナーを記述 |- tools/ # バッチや、CLIツールをココに |- config/ # 設定ファイル |- __init__.py |- development.py |- production.py |- app/ |- __init__.py |- models/ |- views/ |- statics/ # 静的ファイル |- css/ |- js/ |- img/ |- templates/ |- migrations/ # flask-alembic を用いる場合の migration ファイル |- tests/ # noseテスト モデルとビューとモックデータ |- models/ |- views/ |- mocks/ |- venv/ # pyvenv 環境 gitignore しましょう |- lib/ |- bin/ |- include/ |- man/ (URL先の文章から抜粋) statics/ のディレクトリはクライアントサイドのフレームワークに合わせて修正するなどをするといいでしょう。 その際、 SPA であれば、 templates に一枚だけの HTML ページをレンダリングし、そこで使う js や css を宣言し、後はクライアントサイドのフレームワークで組んでいきましょう。 WEB-API だけを公開する場合、 views の部分で json だけを返す API として作成すると、ネイティブアプリ、 web アプリ両方に対応出来るようにするといいでしょう。

サンプル4_blueprintを使った例(http://www.subarunari.com/entry/2017/10/11/003225)

/FlaskAppDirectory ├── app.py └── blueprints     └── func1         ├── __init__.py         ├── views.py         └── templates            └── func1             └── func1_a.html

サンプル5_dbのモデルの構成(https://github.com/yoshiya0503/Hermetica/wiki/03-Model)

application/ |- app/ |- __init__.py |- models/ |- __init__.py |- sa_user.py |- me_user.py |- session.py

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

参考になるかわかりませんが、私がFlaskで構築したブログサイトの構成です。
RESTfulAPIは分けて、apiのディレクトリに入れました。

また、modelsに各テーブル処理のファイルがあります。
「アルゴリズムの処理コードが記載されたmodel」は、commonsmodulesなどの方が良いんじゃないでしょうか。

ページを返すところはHandler.pyとしましたが、View.pyの方がよいと思います。

. ├── README.md ├── main.py #アプリ起動 ├── requirements.txt ├── api #RESTfulAPI │ └── ArticlesHandler.py ├── create_dynamodb.py ├── handlers #ページをかえす。  **View.pyの方がよいかも │ ├── ArticleHandler.py │ ├── ContentsHandler.py │ ├── IndexHandler.py │ ├── LoginHandler.py │ ├── __init__.py │ └── admin │ ├── AdminHandler.py │ └── __init__.py ├── lib #計算など │ ├── AccountManager.py │ ├── DataBeseManager.py │ ├── PermissionPolicies.py │ └── __init__.py ├── models #DBの操作 │ ├── ArticleModel.py │ ├── TagModel.py │ ├── UserModel.py │ └── __init__.py ├── static #静的ファイル │ ├── css │ ├── favicon.svg │ ├── icons │ ├── images │ └── js ├── templates #テンプレート、アンダーバーが部品 │ ├── article.html │ ├── contents.html │ ├── index.html │ ├── login.html │ ├── admin │ │ ├── _base.html │ │ ├── _menuebar.html │ │ ├── admin.html │ │ └── edit.html │ └── includes │ ├── _base.html │ ├── _footer.html │ ├── _navbar.html │ ├── _page_header.html │ ├── _sidebar.html │ ├── _top.html │ ├── robots.txt │ └── sitemap.xml └── zappa_settings.json

投稿2018/07/31 06:10

suzu6

総合スコア168

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問