調子に乗るな、みんな頭がいい

ある程度負けることを認めながらつらつらと書いていきます。Twitterで育ちました。

APIの勉強(Day5/5)

前回まで、簡単なAPIをFlask上に作成した。

今回は、こちらの記事(

qiita.com

)で、

・POST

・DBへの接続

・レコードの追加・削除

・ログインなど

までを行う。

 

・POST

※htmlにフォームを用意する。押すとPOSTリクエストが出る?それがapp.pyに伝わる?nameがapp.pyから帰ってきて表示される?

※app.pyではルーティングに/indexにPOSTリクエストが来た場合の処理を追加。
その処理内で、フォームのテキスト要素を取得し、nameとしてhtml側に値を渡す。

 

・DBへの接続

(any directory)以下にmodelsフォルダを作成し、その中に__init__.pydatabase.pymodels.pyの3ファイルを作成

 

__init__.py:中身は空。モジュールを呼び出す際に__init__.pyがないといけないために作成する

database.py

テーブルのカラム情報を定義するためのクラスを格納します。
テーブル操作を行う際のレコード生成もこのクラスを通して行います。
今回は神社に対しての「お願い」を格納するためのテーブルを作成したいと思います。
カラム構成は

  • ID(int:キー情報)
  • title(String(128):お願いのタイトル)
  • body(text:お願いの内容)
  • date(datetime:お願いの投稿日時) にします。 models.pyを以下のように記載しましょう。

DBとの直接的な接続を確立している。

f:id:you_suffer:20211105111716p:plain

  1. database.pyと同じパスにonegai.dbというファイルを絶対パスで定義
  2. SQLiteを利用して1.で定義した絶対パスにDBを構築
  3. DB接続用インスタンスを生成
  4. Baseオブジェクトを生成して、
  5. そこにDBの情報を流し込む

>>> from models.database import init_db >>> init_db()

でエラーが出て、modelsというライブラリが入っていないのではないかとか右往左往。

結論から言うと解決。理由は、models.databaseというのはライブラリではなくて、/models/database.pyのことだった。書き方については以下の記事参照。

f:id:you_suffer:20211105115401p:plain

 

qiita.com

セットアップしたSQLiteのDBのonegaicontentsテーブルからレコードを全件引っ張ってきて、Webページに表示させる

 

レコードの追加・削除

 

・ログイン機能とセッション機能

  • ログイン機能
  • ユーザ新規登録機能
  • ログイン中は左上に常に「{{ユーザ名}}神社」を表示
  • ログアウト機能

DBにユーザの名前とパスワードを格納するためのusersテーブルを追加します。
まずmodels.pyにusersテーブルの定義を追加します。

 

ここで詰まった:

原因=models.pyでclass OnegaiContentsは認識されているのに、class Userが認識されていないために、DBで処理ができていない。

→再起動したら解決した。または、

from models.database import init_db
from models.models import User
init_db()

この順でやらなかったのが問題かもしれない

f:id:you_suffer:20211105160655p:plain

確かにPWがハッシュ化されている。

 

 

・requirements.txt

f:id:you_suffer:20211105175148p:plain

これだけでよかった

pip freeze > requirements.txtの問題点は以下。

①@以下に自分のPCの環境の絶対パスが入ってしまうため動かない

②不要なライブラリが多すぎる

 

※しかしデプロイしてみたwebサイトは動かない

 

takazawa.github.io

これを使ってみたところ、(出てきたファイル自体はダメだったのだが、)

Flaskが必要なことが判明。

f:id:you_suffer:20211105180426p:plain

入れたら...

f:id:you_suffer:20211105180522p:plain

できたゾ