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.
いろいろ調べたところ、スクリプトにスコープを追加など様々あるようだが、どれでもできない。
調べている途中でLogger.log
というログの取り方を知った。
log用のdocに残すのは二度手間の感が強いので、スクリプトのログに記録を残すようにした。
いろいろいじった結果、トリガーの起動を「フォーム送信時」にすると、e
のなかにフォームのリクエストが入っていないようだ。
ならば、フォームからスクリプトを起動すれば、「フォーム送信時」のタイミングを逃さないと考えた。
フォームの方のスクリプトに移してみると動いたが、メールが送れない。
どうやらフォーム内の「メールを取得する」では、リクエストのオブジェクト内にメールアドレスは含まれないようだ。
仕方ないので欄を一つ増やした。
ローンチ
できました!
AWSeducationの環境なのでかなり貧弱です。いずれAWSアカウントを作った方がいいなあ。
UTokyoSprintProjectの運営から配られるという話だったが、まだIP上限 の問題が解決していない。
今後の課題は、
* webページ内で入出力を完結
* 出力の式を明示
* ロゴをかっこよくデザイン
* CSSの色を変える
* 根拠とした参考文献の明示
* ログイン機能
* 厚生労働省などの新しいニュースの紹介
* ユーザーに沿ったカレンダーの予定実装
* ユーザーのグループ化ができるようにする
* 出席予約をグループ内で調整(グループの人員が固定)
* 店舗への予約
やることはとりあえずこの辺りのことを進めたいが、フィードバックがないときついなあ。
グループ内のは「くるくるプレート」というものがあるらしいので、それを使えないかな。