スクリプトのお勉強

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

-スクリプトのお勉強

執筆者:

関連記事

Markdown to HTML(grip)

1.はじめに 最近の文書はほとんどMarkdownで書くのですが、それをHTMLに変換する方法を調べました。 ただし、私がMarkdownと思っている文法は「github-flavored-markd …

Pythonからsvnしてみる

SVN: レガシーシステムの一つ。。 私の関わってるシステムでは、いまだにsvnレポジトリがあります。pythonで処理する必要性が生じましたが、そういえばどう処理していいもんか、完全に忘れました。 …

CentOS7 + Django2.2でSQlite3を使用する方法

そのままだとエラーになる 素のCentOS7で、SQLite3を使用して、Djangoアプリを起動すると以下のエラーになります。 File “/opt/webapps/django_upload/.v …

svelteをチュートリアルしてみる

年末の休みは、svelteのチュートリアルをしてみました。なんとなくやはりそう?なので。 svelteとは Webアプリのフロントエンド(UI)用フレームワークです。要するにReactみたいなもんです …

Python3でsnmptrapの受送信をしてみる

はじめに 私はなんちゃってプログラマですが、なぜかいまどきsnmptrapの受信プログラムを作ることになりました。 なんだかなと思いますが、、まぁブログネタにいいかなと思い、手元でもやってみることにし …

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