なにごとも 継続

博士課程での研究や思ったこと、作業記録、などなど自由に書いていくつもりです

Googleフォームを使ったwebアプリ

 動的ファイル実装

自分メモ。
UTokyo Sprint projectの続きをしている。
動的なウェブ構築までたどり着いた。
条件分岐のHTMLをかけそうにないので、googleフォームの入力をデータベースに入れて、出力する。

テンプレート上でpythonのコードを書きたい場合は{{ }}や{% %}を使います。当面、前者は実際に表示されるもの、後者は表示されないものと区別しておけば大丈夫です。フォームの型については、bulma参照

<form>タグの直下に{% csrf_token %}を忘れないこと。

googleフォームで、スクリプトを使った自動返信の方法も調べました。

作成フロー

models.pyの書き換え → マイグレーション  
urls.pyを編集  
forms.pyを編集  
views.pyを編集  
HTMLファイルを編集  

主に構築はこの流れ。
とりあえず、基本は意識しつつ、formsでなくてフォームを使う。

googleform

自分で作るのは大変なので、googleフォームを作った。
googleスプレッドシート入力をメールで送信する。
この方法だと手動だ。だがコードの解説が載っていて便利だ。
探しているのは自動返信機能だった。
こちらも参考になる。

スプレッドシートの数式処理

列の全てに共通させる方法arrayformula関数
=arrayformula(C3:C*D3:D)

if文のほかに、
ifna:エラーがあるかどうか判定
があると知った。

 出力をメールで返す

自動返信のために、上記のサイトのようにGoogle app scriptを利用する。
スプレッドシートの「ツール」から「スクリプトエディター」を編集することで、スクリプトを埋めることができる。
埋めたスクリプトは、トリガーを設定することでフォームが送信されたときに起動ができる。

主なコードは次のものを引用した。

Google Formに入力された内容をメールで返すGoogleAppsScriptプログラム(ロックサービスによる多重投稿対応)

どっこい、e.response.getItemResponses()のエラー

TypeError: Cannot call method "getItemResponses" of undefined.

いろいろ調べたところ、スクリプトスコープを追加など様々あるようだが、どれでもできない。

GASが動かないときに見るところ

調べている途中でLogger.logというログの取り方を知った。
log用のdocに残すのは二度手間の感が強いので、スクリプトのログに記録を残すようにした。

いろいろいじった結果、トリガーの起動を「フォーム送信時」にすると、eのなかにフォームのリクエストが入っていないようだ。
ならば、フォームからスクリプトを起動すれば、「フォーム送信時」のタイミングを逃さないと考えた。

https://memordm.com/googleform/

フォームの方のスクリプトに移してみると動いたが、メールが送れない。
どうやらフォーム内の「メールを取得する」では、リクエストのオブジェクト内にメールアドレスは含まれないようだ。
仕方ないので欄を一つ増やした。

 ローンチ

できました!

ねえ、そこ空いてるかい?

AWSeducationの環境なのでかなり貧弱です。いずれAWSアカウントを作った方がいいなあ。

UTokyoSprintProjectの運営から配られるという話だったが、まだIP上限 の問題が解決していない。

今後の課題は、
* webページ内で入出力を完結
* 出力の式を明示
* ロゴをかっこよくデザイン
* CSSの色を変える
* 根拠とした参考文献の明示
* ログイン機能
* 厚生労働省などの新しいニュースの紹介
* ユーザーに沿ったカレンダーの予定実装
* ユーザーのグループ化ができるようにする
* 出席予約をグループ内で調整(グループの人員が固定)
* 店舗への予約

やることはとりあえずこの辺りのことを進めたいが、フィードバックがないときついなあ。
グループ内のは「くるくるプレート」というものがあるらしいので、それを使えないかな。