カテゴリー:python
ホームPage 1 / 41234

テレビは選挙一色だが、さすが俺たちのEテレは違う。
今日は復讐だ。いや復習だった(笑)
改めてview。ある特定のURLにアクセスしたときにどのようなページ内容を表示するのか?一連の処理内容を書いておく。また、フォームに入力されたデータの処理や保存などの処理内容も書いておく。

例えば記事の編集を行う処理を追加したい場合。

まず編集ボタンを該当HTMLに追加する。
編集ボタンをクリックしたら編集画面を返す処理をviewに追加する。
編集画面を用意する。
編集内容を受け取ってデータベースを更新する処理をviewに追加する。

  • python

前回、一旦戻ってやり直し始めたものの、コマンドで作成するというテーブルができない。
テーブルができないというよりコマンド自体がnoneとなる。何度かやっていると今度はサイト自体が動かなくなる。
今回はほとんど触らず、コードをコピペしただけなので何がおかしいのか見当もつかないので、サンプルコードをそのまま移植することにした(笑)
見た目は同じなのになぜ動く(笑)

が、やはりテーブルを作成するというコマンドがおかしい。pip run pythonなどと書いてあるが、pip runを外すとうまくいったようだ。
と思ったもの束の間、挙動がおかしい。
記事を投稿したあとの記事タイトルが表示されていない・・・

次のセクションのサンプルコード丸ごと移植したら、ま、動くわな・・・
なぜなんだ・・・本の通りにやっとるやんけ・・・いや本の通りがよくないのか?そうなんんか?

あぁ・・・・

前回pythonをやってから既に5日ほどたっている。いつになったらこの本を終える事ができるのか。
それほど厚い本ではないのにまだ半分ほどしか進んでいない。

さて、crudとは
create データの作成
read データの読み込み(表示)
update データの更新
delete データの削除
これらの考え方は様々なものに応用できるようだ

記事に関連するビューとログイン関連のビューに分割
モデルごとにビューを用意して分かりやすくする
viewsフォルダを作成し、その中にentries.pyを新規作成。元々のviews.pyをviewsフォルダに移動させる。
initの方もviewの読み込みを修正する

念のためコマンドプロンプトから起動してみると、動かない(笑)インポートエラー、アンノウンロケーションとなっている。
どうやらよく読んでいなかったらしい。空のinitをviewsフォルダに作成する必要があった。

レイアウトページに投稿ページのリンクを追加
投稿ページを返すようにentries.pyにビューを追加
投稿ページを作成
投稿された記事をデータベースに保存する機能の作成
 entries.pyにadd_entry(投稿先)ビューを作成 db.session.add(モデル名)で新しい内容が追加され、db.session.commit()でデータベースに書き込まれる

ここまで本の通りにやるものの動かない(笑)
コマンドプロンプト上ではpythonでアプリケーションを起動させると動くがページが表示されない。
そのようなデータベースはありませんとあるので、データベースの設定などが間違っているのだろう。
これは一旦前に戻ってやり直したほうがよさそうだ。
レイアウトページにリンクを追加したところまで戻るととりあえず正常に表示動作するようになる。

記事の投稿や閲覧をするには、当該データを保存しておく必要がある。
ということはデータベースが必要となる。

Flaskではデータベースを扱うSQLAlchemyというライブラリがあるそうです。

そもそもデータベースと言っても様々なものがあって、それぞれ特徴があり、向き不向きなどもあるようで初心者だとそれこそわけわかめです。

SQLAlchemyをインスト
ということでSQLAlchemyをインストする必要がある。ここで注意が必要だったのはpipenvでインストすると本では説明されているが、仮想環境envは導入していないのだった。
仮想環境だとプロジェクト毎に管理できるからとあったのだが、めんどくさそうなので(何がめんどくさかったのかは忘れた(笑))導入しなかったが今思えば導入すればよかった。

configに設定する
しかし、設定するのがSQLiteとなっていて少し混乱する。
そもそもSQLAlchemyはSQLをPythonのコードとして表現することができるものだそうで、だとするとSQLなどのデータベースの設定はやはり別途行う必要がありますよね。なるほどです。
SQLAlchemy をググるとは SQLalchemyはORM です DBに接続しメタデータを取得します ベースモデルを継承し、モデルを定義し、テーブルと関連づけます などと、呪文のような事が書かれていて愕然としますが、全く気にしません(笑)

init.pyも修正

モデルの定義
ここで先ほどのORMというのがでてきた。
モデルを定義しておくとモデルに対して指示をだすだけでデータベースを適切に操作してくれる、ようはデータベースを簡単に扱うことができるらしく、これら一連をORMというらしいです。
そもそも、データベースをどのように操作するかが分かってはいませんが、確かにwebサービスにアクセスしてユーザーネームや投稿された記事を保存し、それらを適切に取り出して表示する、などといったことをデータベースを操作するために別途データベースを扱う言語で記述し管理するとなると、しちめんどくさい。

flask_blog直下にmodelフォルダの作成 その中にentries.pyファイル作成
ここにモデルを定義する
タイトルはどうだとか、日付がどうたとか属性の定義
モデルに対する処理の定義
表示フォーマットの定義

データベースへの反映作業
これはモデルを定義した後一度だけ行う必要があるらしい。
コンソールで実行する場合は簡単だが、スクリプトを作成して実行するほうがいいようなのでそうする。
確かにスクリプトのほうが物凄くめんどくさい。
Flask-Scriptをインスト
flask_blog直下scriptsフォルダ作成 db.pyファイル作成
アプリケーションフォルダ直下にスクリプトファイルをコンソールで実行できるようにファイルを作成する
最後にスクリプトファイルをコマンドプロンプトから実行する。そうするとdbファイルが作成される

さて、SQLAlchemyをインストしようとするとできない (笑)
コマンドプロンプトから直接pythonを実行してインストするのではないようだ。
まず現在作業している、ようするにFlaskを使ってサイトを作っているフォルダをやはり指定してやり、そこでインストールするようだ。

データベースの反映作業をやろうとスクリプトファイルを実行しても、エラー(笑)
manage.pyファイルを完コピしたら動く。なぜ(笑)見た目はまったく変わらないのに(笑)

念のため今までのページがきちんと表示されるかやってみると今のところ動いた(逆になんにも反映していないのか(笑))

ホームPage 1 / 41234