スクリプトのお勉強

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

-スクリプトのお勉強

執筆者:

関連記事

SimpleHTTPSAuthUploadServer というPython用モジュールを書いた

書いた動機 リモート開発になっているので、遠くのホストにあるファイルをお手軽に見たい、取ってきたいor編集したい、というニーズが、私の中であります。ftpなんか使わず、全部ブラウザでやりたいわけです。 …

seaborn + Pandas + Python によるグラフ描画(その2: グラフ描画編)

前回の続き 前回の続きです。 折れ線グラフ まずは折れ線グラフを描画したいと思います。 描画するのは以下です。 運用商品(4つ)日経平均 以下で起動します。引数(dataset-2017-201908 …

Pythonでコマンド非同期起動

はじめに 小ネタです。 作成するプログラムの要件で、コマンドを起動して、そのコマンドが「継続」している/していないことを確認する、という要件があります。 具体的には、pingコマンドを普通に打つと、コ …

CentOS7をRocky Linux 9に移行する

このVMのOSをCentOS7にした関係上、そろそろupdateする必要があります。そもそもCentOS7を選択した理由は、仕事で使用するからでした。 で、仕事ではRocky Linux 9なので、こ …

Pythonパッケージ管理の歴史

歴史っても、あまり過去に興味がないので、、 Pythonのパッケージ管理の歴史は、常に流動的で、そもそもからして、とてもじゃないがまとめて説明できるようなものではないです。 はっきり言って昔からよく分 …

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