仕事柄、簡単なWebアプリを作りたいと思うことはよくあり、その場合はその場で直せるスクリプトで書きたいとよく思うものです。
すごーく簡単なフォームを非常に簡単に使いたいので、まずは簡単に作れるフレームワークを調査しました。
調べてみるとPyWebIOという、Webアプリを作成するフレームワークがあるらしいです。
PyWebIOとは
PyWebIOとは、PythonでWebアプリを作成できるフレームワークです。
普通にWebアプリを開発すると、SPAだとJavaScriptとPythonに完全に分離してしまい、複雑になります。
だからってDjango等で作成すると、準備がやたら大変です。
これで開発すると、Webアプリはこれだけです。
具体的に何するの?
以下のことをしたいと思います。
- PyWebIOでフォーム作成
- フォーム情報を元にREST API呼出
- REST APIの結果出力
近年REST APIで提供されてるサービスは多いので、ちょっと加工してAPI叩きたいなーという状況を想定しています。
環境
- WSL2
- Python3.10
ソース
ソースをここに置きました。
以下はgit cloneした前提で記述します。
REST API側
先に以下で起動しておきます。
$ cd api
$ python3 -m venv ./venv
$ source ./venv/bin/activate
$ pip3 install -r requirements.txt
$ cd app
$ python3 ./main.py
WebIO側
WebIO側の起動は別ターミナルで以下にして行います。
$ cd pywebio
$ python3 -m venv ./venv
$ source ./venv/bin/activate
$ pip install -r requirements.tex
$ python3 ./app.py
画面表示
Web画面の中心コードは以下です。
def index():
repos = ["master", "develop", "feature"]
env = ["dev", "stg", "prd"]
jobs = ["A", "B"]
info = input_group("設定",[
select("リポジトリ", options=repos, name="repo"),
select("環境", options=env, name="env"),
select("JOB", options=jobs, name="job"),
input("制限(ex: DD)", name="limit"),
input("Dryrun(ex: --check)", name="Dryrun")
])
print(info['repo'], info['job'], info["limit"])
result = call_api(info)
if not result:
put_error(f"Error")
if int(result["Status"]) == 200:
put_info("Success")
else:
put_error(f"Error")
put_text(f"request \n {info}")
put_text(f"response \n {result}")
put_link("設定に戻る", app="index")
http://localhost:18080/
にアクセスすると、以下のFormを表示します。

なにか入力してSubmitすると

になります。
終わりに
コードの少なさの割には、ある程度きれいに表示するようです。
まあまあ使えるかなと思いました。
参考
https://qiita.com/yota_dev/items/ab8dea7f71c8a130d5bf
https://qiita.com/payaneco/items/51a11a8063b7f0654561