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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1032閲覧

FLASK BruePrint作成時のapp.configの扱いについて

yuujiMotoki

総合スコア90

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/03/05 03:59

編集2020/03/05 04:24

FLASKで作成したデータベースアプリがあります。

現在、このモジュールをPORTを変えて起動していますが、
BLUEPRINTを使って、まとめたいと思っています。

アプリケーションは、app.pyで同名であり、
ほとんどコピーして複製化しています。

フォルダの構成は下記です。

C:.
├─master
│ ├─static-database.db
│ ├─templates-index.html
│ ├─upload
│ └─__pycache__
└─ort
├─static-database.db
├─templates-index.html
├─upload
└─__pycache__

個々のモジュールに、グローバルで使っている変数、データベース、フォルダ等が
あり、これらのソースを極力触らないで、BLUEPRINTでまとめることは可能なのでしょうか?

現状では、重複分は名前を変えるなどの修正が必要になりますが
作業で発生するミスを避けたいと思っています。

ソースA

python

1master.views.py 2 3TEMP_FOLDER = './upload/' 4 5app = Flask(__name__) 6app.config['TEMP_FOLDER'] = TEMP_FOLDER 7app.config['DATABASE']='database.db' 8 9@app.route('/', methods=['GET']) 10def main(): 11 conn = sqlite3.connect(app.config['DATABASE']) 12 cur = conn.cursor() 13 cur.execute("SELECT * FROM schedule order by upd DESC") 14 table = cur.fetchall() 15 conn.close() 16 return render_template('/index.html',table) 17

ソースB

python

1ort.views.py 2 3TEMP_FOLDER = './upload/' 4 5app = Flask(__name__) 6app.config['TEMP_FOLDER'] = TEMP_FOLDER 7app.config['DATABASE']='database.db' 8 9@app.route('/', methods=['GET']) 10def main(): 11 conn = sqlite3.connect(app.config['DATABASE']) 12 cur = conn.cursor() 13 cur.execute("SELECT * FROM schedule order by upd DESC") 14 table = cur.fetchall() 15 conn.close() 16 return render_template('/index.html',table) 17 18 19

合体APP

from flask import Flask app = Flask(__name__) app.config['PORT']='8000' from master.views import app1 app.register_blueprint(app1, url_prefix='/master') from ort.views import app2 app.register_blueprint(app2, url_prefix='/ort') if __name__ == "__main__": app.run(app.config['PORT'], host='0.0.0.0')

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

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

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

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

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

guest

回答3

0

自己解決

FLASKを辞めて、DJANGOに移行しました。
まだ試行していますが、FLASKよりも拡張性は高い気がします。

投稿2020/04/24 12:46

yuujiMotoki

総合スコア90

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

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

0

自分なりの解決方法を得ました。

1)各モジュールのソースコード
app.configで書いている文章は、そのままcurrent.appに置き換える必要がありますが、
これは下記の方法で書き換えます。

from flask import current_app
APP.CONFIG → current_app.config

2)config内の辞書名
DATABASEファイルなど、そもそも同名で運用している状態は、いずれにしろ改変が必要
・ファイル名を変える DATABASE_APP1、DATABASE_APP2など
・DATABASEの中に、APP1,APP2を識別するテーブルを作成、SQLのFROM文を書き換えてデータを分離
・ 〃      同一テーブル内に、APP1,APP2を識別するカラムを生成し、SQLのWHERE文でデータを分離

今回はSQLITEを使っているので、データベース自体は重くありません。
そのために、ソースコードの変更が最も少なくなるように、ファイル名を変えて運用ということにしました。

3)Staticフォルダ、Templateフォルダ

ここは2)と同じように、フォルダを統一して、名前を変えるしかなさそうです。。。

他に、良い運用があれば教えて頂ければと思います。

投稿2020/03/09 02:06

編集2020/03/09 02:11
yuujiMotoki

総合スコア90

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

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

0

既存の完成したものを、ソースを極力触らないで
BLUEPRINTでまとめることは可能なのでしょうか?

現状のコードによると思います。
現状のコードをそのまま使うなら、別サイトとしてApacheやNginxで公開し、URLをそろえる(aaa.com/FuncA, aaa.com/FuncBの様な感じ)のが良いかもしれません。
まとめたい理由によると思いますが、どのような理由なのでしょうか?

Blueprintでまとめる場合は、DBもまとめることになると思いますので、既存のコード内で重複している部分は書き直すことになると思います。
(書き直さないとメンテナンス性も落ちそうですし)
その場合、ディレクトリ構造をDjangoの様にすれば機能を追加して行く感じで作成できそうです。

記憶を頼りに書いているのでなんか間違っているかもしれませんが、以下のような感じです。

root ├ Application_A │ ├ static │ ├ templates │ ├ database.db │ └ app_A.py ├ Application_B │ ├ static │ ├ templates │ ├ database.db │ └ app_B.py ├ templates ├ static └ app.py

ちなみに、TEMP_FOLDERというのがFlask ver1.1.xのドキュメントで見当たりませんでした、何かモジュールを使っていますか?

投稿2020/03/05 04:22

FiroProchainezo

総合スコア2424

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

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

yuujiMotoki

2020/03/09 02:28

今回の目的は、ソースコードの管理を一括のレポジトリにしたい、サーバーでのアプリケーション実行数を減らしたい、などがあります。 ひとまず、アプリケーションの派生版ができてきて、構造的な見直しが必要になってきました。 現時点では、ユーザー割り当てなど動的なものまでは、望んでいませんが、そのうちユーザー認証含めて、FLASKだけでどこまでできるかは不安です。 GIT-HUBに参考になる記事を見つけたので、こちらを参照しようと思います。 https://github.com/hamano/explore-flask-ja/blob/master/blueprints.md
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問