0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

htmxを使ってみた-(3)ルート関数-

Last updated at Posted at 2024-10-22

ルート関数

http://localhost:8001/

にアクセスしたときに呼び出される関数(勝手に「ルート関数」と呼んでいます)は、fastapi\app\prog\p00.y にあるdef root_function()です。

p00.py
@router.get('/')
def root_function():
	'''ルート関数。データの一覧表を出力する
	'''
	conn = mydb.connect(**config.database)
 # (中略 データベースを開いてデータを取り出す)
 
	template = env_j2.get_template('html00.j2')  #テンプレートを利用して出力データを整える
	main = template.render(table_caption='観光施設一覧' , institutions=institutions)

# (中略)
	# データを返す
	return HTMLResponse(content=head + main + footer + "\n</body>\n</html>\n")

MySQLへのアクセス
SQLAlchemyというライブラリを使うことが標準みたいですが、SQLを書くことができるmysql-connector-pythonを利用しました。

MySQLのストレージエンジン
MySQLは色々なストレージエンジンを使うことができますが、InnoDBが良いとされています。
しかし、コールドバックアップができるという1点のため、MyISAMを使っています。
コールドバックアップは、MySQLを止めてからファイルをコピーするのですが、私は、誰もアクセスしていない時間に、MySQLを止めずに、ディレクトリごと圧縮・コピーしています。

MySQLのカラム名
カラム名に日本語(マルチバイトコード)を使っています。
最初は怖かったのですが、今のところ問題なく動いています。
UTF-8なので、ソースコードのラベル(関数、変数名など)にも、日本語が使えるはずなのですが、怖いのでやったことがありません。

ページ(データ)出力

root_function()関数で出力するデータを整えています。
前半で、データベースからデータを取り出し、後半でテンプレートにデータを流し込んで、HTML形式でデータをクライアントに返しています。
テンプレートは、html90.j2 , html99.j2 , html00.j2 と3つ使っています。3つに分けるのが良いかどうかわかりません。
01.png
のような画面ができます。

ファイル名について
普通の人は、「load_data.py」とか「save_data.py」などと機能が分かる名前を付けると思いますが、私は、英語の名前を考えるのが面倒なので、通番にしています。案外便利です。

関連記事一覧

htmxを使ってみた-(1)htmxの基本-
htmxを使ってみた-(2)準備-
htmxを使ってみた-(3)ルート関数-
htmxを使ってみた-(4)htmxを使う-
htmxを使ってみた-(5)HTMLのdialog-
htmxを使ってみた-(6)データの表示-
htmxを使ってみた-(7)データ追加-
htmxを使ってみた-(8)要素の変更-
htmxを使ってみた-(9)ページの再読み込み-
htmxを使ってみた-(10)データの変更-
htmxを使ってみた-(11)データベースの排他制御-
htmxを使ってみた-(12)確認ダイアローグ-
htmxを使ってみた-(13)データ削除-(最終)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?