Django前回からの続きtohutokonsome.hatenablog.com前回は、Djangoで作成したプロジェクトに対して、手動でviews.pyを作成して、簡単なWebページを作成した。今回はよりDjangoらしい機能を使っていきます。管理画面をさわってみる管理者画面で作成したデータをpythonでさわる一旦、ここまでをまとめ今回作成するもの以下のようなブログサイトを作成してみたいと思います。前回同様に、まずプロジェクトを作成します。ブログサイトの名前は「ohankyblog」としました。ohankyblogそして、前回と大きく異なる点として、「startapp」なるコマンドを用いてアプリケーションを作成します。記事を管理するアプリケーションということで、「posts」とします。アプリケーションがどういった単位で作成すべきなのか、という点がイメージできていませんが、とりあえず続行します。posts」とすることで、新たにpostsディレクトリとその配下にいろいろなファイルが追加されているのが確認できます。views.pyその配下のファイルには、前回手動で作成した、「views.py」が作成されていることに気づきます。作成されたviews.pyにHTTPリクエストから呼ばれる関数を書くんだな、と想像できますね。templatesとhome.htmlの作成とりあえず、前回と同様にトップ画面を作成していきます。トップ画面である、home.htmlファイルを以下のようにtemplatesディレクトリ配下におきます。templatesディレクトリの中にさらにpostsディレクトリを置く意図がいまいちわかりませんが、こちらもUdemyの動画にならいます。home.htmlはこの段階では適当な内容なので、内容は割愛します。models.py#posts配下にtemplatesとhome.htmlを作成した。views.pyviews.pyとurls.pyの編集このへんは慣れてきました。posts配下のviews.pyにhome.htmlを返す関数と、urls.pyにurlの情報を定義します。name='home'),]前回は言われるがままに書いていましたが、「r'^$‘」って正規表現で、「^」は先頭一致、「$」は末尾一致で、組み合わせることで何も入力されていない(つまり、ルートディレクトリである)ことを表現している気がします。setting.pyの編集urls.pyとviews.pyを編集したらもう参照できるかな?と思いきや、前回定義したhome.htmlの場所を定義していません。前回は、setting.pyのTEMPLATESに記載しましたが、startappでアプリケーションを作成する正規の方法では、setting.pyのINSTALL_APPSに作成したアプリケーション「posts」を追加すればいいみたいです。<----これ]これを行うことで、Djangoはpostsアプリケーションがあるんだなって認識してくれるみたいです。この状態でrunserverして、ルートディレクトリにアクセスすれば、home.htmlが表示されるかと思います。モデルの作成さて、モデルというものがここででてきます。わかってませんが、データをもってるクラスって思っていればいいのかもしれません。MVCモデルのMの部分だよってことなのかな。※このへんをみるとモデルとは、データベースの定義と追加のメタデータの定義とある。documentationさっそく、posts配下にあるmodels.pyを編集していきます。views.py編集した内容は以下の通りです。記事の内容を管理するクラスと思われる。modelの定義はここに詳しく書いてある。記事の内容を構成する要素を定義しています。気になる、models.CharField()あたりですが、これがデータの型を表しているみたいです。title要素は、Char型の要素ですよ、っていうのと、引数にmax_lengthを与えることで最大250文字ってことを定義しているみたいです。詳細は以下に書いてあります。Djangoさてさて、ここで「title」は「Char型」だよと定義する意味なんですが、冒頭の「モデルとはデータベースの定義」ということを思い出します。ここで定義したデータ型をもつPostsテーブルをDjangoが作成してくれるみたいです。テーブルっていっても、データベースなんかどこにあるんだっけ、と思ったのですが、setting.pyをみたりすると、sqlliteなる記述を発見できるかと思います。デフォルトでsqlliteというデータベースが存在しているみたいです。makemigrationとmigrationモデルに情報を定義したら、その次は、「makemigration」と「migration」コマンドを実行します。テスト用のWebサーバーを起動していたら、落としときます。「makemigration」を実行することで、さきほどのモデルに定義した情報をもとにファイル「0001_initial.py」が作成されます。Postsこれは、DBのスキーマを作成するためのpythonコードが書かれているみたい。sqlmigrateコマンドを実行すことで、DDL文の形式で確認することができます。NULL);COMMIT;そして、このDDL文を実行するコマンドが、「migrate」になります。OK初回のmigrateなんで、いろいろでてる。postsも表示されているので、うまくいったみたい。Adminさきほど、モデルを編集して、migrateして〜みたいなことをしたので、sqlliteにPostsモデルの定義をもつテーブルが作成されたはずです。実際に作成したテーブルに値を入れるにはどうしたらいいんだろう、ということで、前回スルーした以下のDjango管理者画面について触れていきます。views.ohankyworld),]「http://localhost:8000/admin」にアクセスすると、以下のような画面が開きます。Djangoはこの管理画面からさきほど作成したモデルのデータを作成することができます。管理ユーザーの作成まず、管理画面を使用するユーザーを作成する。「createsuperuser」でuser名とアドレス(適当)、パスワードを設定して、サクッとつくります。successfully.管理画面をさわってみるログインすると、以下の画面が表示されます。このままでは作成したPostモデルを触ることができません。編集できるようにするには、「admin.py」に以下の定義を追加する必要があります。Post#admin管理画面でさわれるようにする。admin.site.register(Post)定義を追加したあとに、管理者画面をリロードすると、以下のように作成したモデル(というよりアプリケーション?)が追加されます。追加されたPostをクリックすると、まだなんもない状態であることがわかります。POSTを押下します。すると、以下の画面のように、モデルに定義したフィールドを持つ入力画面が表示されるではありませんか!さっそくデータを適当に入力してみました。合計4件ほど追加しました。object」なるものが4件ほどあるのがわかるかと思います。管理者画面で作成したデータをpythonでさわるさきほど管理者画面で作成したデータをviews.pyからさわります。さわるといっても、すごく簡単です。'posts/home.html',{'posts':posts})postモジュールをimportするだけです。取得したモデルは、前回同様、ディクショナリ形式でrender関数に渡すだけで、html側で参照できます。home.html側はこんな感じです。postオブジェクトは複数あるので、こんな感じでループさせる。管理者画面から追加した内容が表示されていることが確認できます。※イメージが表示できてないのは個別で設定が必要。ここまでをまとめ関係性をかんたんに書きました。長くなったので、次回に続くかもです。»プロフィール30歳からWebやらなんやらを学び始めた人のブログです。(4)検索はてなブログをはじめよう!konoemarioさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。