スクリプトのお勉強

PyWebIOでform 入力+ REST API呼び出しを作ってみる

投稿日:2023年10月1日 更新日:

仕事柄、簡単な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

-スクリプトのお勉強

執筆者:

関連記事

Svelte(Carbon Components Svelte) + Python(FastAPI)でWebアプリを作る

Svelte用のサンプルとして、Carbon Components SvelteのTreeViewを試用してファイルツリーを表示し、各データはAPIとして読み出し、編集するWebアプリケーションを実装 …

pipenv + Apache + Django起動設定

仕事でwebアプリケーションを作成しています。 Djangoで作成し、webサーバをApache、環境をpipenvで設定したpython3環境上で動かす予定です。 Apacheが起動するまでに、苦労 …

unconstant – perlライブラリ

ちょっとだけperlの機能修正をしたので、そのときに使用したライブラリについて書こうと思います。 perlのunconstant です。 use constantの解除 use constantとは固 …

Webフレームワーク「Django 3.2」を使ってみる

LTSリリースなので、現状でアップデートしてないDjangoプロジェクトをDjango 3.2にしていこうかと思いました。例として、自分のDjango 2.0のプロジェクトをDjango 3.2にしま …

go 1.16 でviperを使って設定ファイルを読みだすプログラムを作ってみた

他にたくさんあるけど こんな感じの内容はたくさんあると思いますが、、goの初心者がなんとなくgoの手習いとして、まずは設定ファイルを読みだすことをしてみようと思いました。 go動作環境 windows …

google オプトアウト Click here to opt-out.