プログラミング123

定年近しプログラマーが作る 今のところは絵のないカルタです。

43.雨の日は チヂミ習慣 プログラム

ある会合に韓国人の方が全員分のチヂミを
持って来てくれたことがありました。

その日は あいにくの雨で、誰かが
「雨の日なのに大変でしたね」と気遣うと…
「雨の日はチジミなんです」と答えていたのを思い出しました。

雨の日はディスプレイの照り返しがないので、
プログラミングに適していると思います。

ここでは Python Flask Blueprint + MySQL での
Web アプリのスケルトンを紹介します。 

ファイル名や変数名は参照や区別し易いように
意味のある名称ではなく記号化して、
対応関係を強調している箇所があります。

作成に当たってはインターネット上の情報を
コピー、編集させてもらっています。


①フォルダ構成(2018/11/09 訂正して、お詫びします。ごめんなさい。)
src+
     +aaa+
     |     +__init__.py
     |     +func1.py
     +bbb+
     |     +__init__.py
     |     +func2.py
     +statics+
     |         +css
     |         +img
     |         +js
     +templates+
     |           +index.html
     +db.py
     +flask_server.py

  
   


②サーバ親
# coding:utf-8
#flask_server.py
from flask import Flask
from aaa import func1
from bbb import func2

application = Flask(__name__, template_folder='templates')

modules_define = [func1.app, func2.app, ]
for appl in modules_define:
        application.register_blueprint(appl)

if __name__ == '__main__':
    application.run(debug=True)


③機能分割1(データ種類により分けると良いと思います。)
# coding:utf-8
#func1.py
from flask import Blueprint
from flask import render_template
import db

# func1のBlueprint
app = Blueprint('xxxx', __name__, url_prefix='/prefix1')

conn_pool=db.get_connection_pool()

@app.route('/a')
deffunc1_a():
    
    try:
      conn=conn_pool.get_connection()
      cursor = conn.cursor()

      #stmt = "select * from table1 where name = '%s'"
      #cursor.execute(stmt % "name1")
      
      cursor.execute("select database()")
      result=cursor.fetchone();
      print(result) 
    
    finally:
      cursor.close();     
      conn.close();
          
    return render_template('index.html',)

@app.route('/b')
deffunc1_b():
    return'func1_b'


④機能分割2(データ種類により分けると良いと思います。)
# coding:utf-8
#func2.py
from flask import Blueprint
from flask import render_template
import db

# func2のBlueprint
app = Blueprint('yyyy', __name__, url_prefix='/prefix2')

conn_pool=db.get_connection_pool()

@app.route('/a')
deffunc2_a():
    
    try:
      conn=conn_pool.get_connection()
      cursor = conn.cursor()

      #stmt = "select * from table1 where name = '%s'"
      #cursor.execute(stmt % "name1")
      
      cursor.execute("select database()")
      result=cursor.fetchone();
      print(result) 
    
    finally:
      cursor.close();     
      conn.close();
          
    return render_template('index.html',)

@app.route('/b')
deffunc2_b():
    return 'func2_b'


⑤DB接続プール
# coding:utf-8
#db.py
import mysql.connector
from mysql.connector import pooling

defget_connection_pool():
    conn_pool = pooling.MySQLConnectionPool(pool_name="mysql_pool_1",
                                            pool_reset_session=True,
                                            pool_size=2,
                                            host = 'localhost',
                                            port = 3306,
                                            user = 'senryuu',
                                            password = 'senryuu',
                                            database = 'senryuu',
                                            allow_local_infile=True)
    
    return conn_pool


⑥テンプレート例
<!-- index.html -->
<!DOCTYPE html>
<html lang="ja">
  <head>
  </head>
  <body>

    <h1>Hello from index.html</h1>

  </body>
</html>