スクリプトのお勉強

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

-スクリプトのお勉強

執筆者:

関連記事

Djangoアプリサンプル – 画像ファイルアップロード + 顔モザイク(統合編)

顔モザイク Djangoアプリ 前々回 前回 を統合して、Djangoアプリを作成してみようと思います。 前提インストール 前回、ubuntu 18を前提に記述しましたが、CentOS7(CentOS …

(小ネタ) python3 date_range + step付き

ちょっと前に同じような感じのネタを。。 したような気がするのだが、まぉおいておこう。。 素のPython3で、日付にてfor文を回す方法 日付で分割して処理をしたいと思うときがあります。例えば、202 …

Pipenv vs Poetry

1. はじめに Pythonでお仕事していると、どうしても、環境設定を行う必要があります。 本番環境で動作するように、設定しなければいけないからです。 いろんな状況はあるでしょうが、私がかかわるプロジ …

WSL2のubuntu 22.04 LTSを24.04 LTSにアップデート

WSL2 24.04LTS アップデート

Rustのお勉強をしてみる(XMLRPCクライアント編)

なんとなく手付かずだったので、Rustの勉強をしてみようと思います。 手始めとして、なぜかXMLRPCクライアントを作ってみます。 環境 WSL2 Ubuntu 22.04 LTS Rustインストー …

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