第5回に続くResponderを使ってDjangoチュートリアルをやってみた~第4回~前回、「【第3回】Responderを使ってDjangoチュートリアルをやってみた【データベース操作編】」の続きです。今回も、Responder(レスポンダー)を使って「Djangoのチュートリアル」をやってみたいと思います。アプリ作成」を、Responderで追う形になりますので、多少内容が異なる部分がありますが、成果物はできるだけ同じモノになるよう作る予定です。現在、作成しているPollsアプリケーションでは、以下のビューを公開用として作成していきます。特定の質問の選択を投票として受付また、ビューのURLは、前回の「/delete/question/1」のような解りやすくシンプルなURLパターンで提供できるようにします。作成していきましょう。質問-インデックスページインデックスページとは、http://127.0.0.1:5042で表示されるビューです。簡単ではありますが、インデックスページを以前すでに作っています。以下のようになっているはずです。%}この章では、これを改造していきたいと思います。インデックスページでは、質問一覧を表示させる必要があります。このようなデータベース処理は、【第1回】から読んでいただいている方には、さほど難しくはないはずです。Questionテーブルから「id」と「質問内容」と「公開日」を持ってきてビューに渡すだけですが、少し凝ってみましょう。questions[:latest]としてみました。個、公開日が新しい順で取得しています。今回は、最新順で表示させる必要があるため、データベースからは降順でデータを取得する必要があります。それでは、次に、ビューを作ります。こちらも、もらった質問一覧をビューで展開するだけなので、とても簡単です。%}今回は、このように実装してみました。質問の詳細は、/detail/1のようなURLパターンで処理することにしています。質問一覧としては機能していますが、せっかくなので少し仕様を変更してみましょう。最新(直近)の質問だけ強調する現在は、公開日が新しい順に並んでいますが、昨日までに公開されたものを強調してみましょう。久しぶりに、モデルをいじります。timedelta(days=days)上記のような関数を追加しました。日前に存在していればTrueを返す関数です。次に、インデックスページを表示させる関数に以下の処理を追加していきます。pub_date=pub_date)Pythonの内包表記を使って、各質問の公開日が最新かどうかをlistとして取得しています。それでは、ビューには、以下のように追記してみましょう。動作確認それでは、新しく質問を追加してみて、実際に動作するか確認してみましょう!画像のように、バッジが表示されていれば成功です!SQLAlchemyでは、モデルクラスに関数の定義が可能で、それらをResponderとリンクさせることでさまざまな機能が実現できます。質問-詳細ページそれでは、詳細ページを作っていきます。choices=choices)のように記述します。次に、ビューを作って行きましょう。ビューでは、質問内容に対して選択肢と、投票機能を備えていれば良いので以下のようなコーディングが良いでしょう。%}次に、投票機能と質問-結果ページを実装していきたいと思います。ようなURLパターンで提供するように実装しました。したがって、いつもの如くルーティング作業をしていきます。url_redirect)実装内容の詳細な説明は、もう大丈夫だと思います。これで、投票機能はできたので、リダイレクト先となる質問-結果ページを作成していきます。ルーティングまずは、ルーテイングから。次に、ビューは以下のように実装しました。%}投票数は、bootstrap4のbadgeクラスを用いてデザインしていますが、どんな形でも構いません。実際に投票してみると、以下のように、うまいこと投票機能と結果のビューが実装できていることが確認できます。404エラーの送出Djangoチュートリアルでは、ここで404エラー、すなわち「ページが存在しないときのエラー画面」についての説明が入ります。Responderには現在そのようなエラーハンドリングがないようです。ネット上でも様々な人が試行錯誤していますが、既存のResponderではスマートに解決できていないようです。力技で解決する場合この方法は、Responderのコード自体をいじってしまうため、あまりオススメできませんが、ひとつの解決案として参考にしてください。Responderのコードをいじると言っても1行変更するだけです。その関数を、以下のように変更してみたください(変更部分は508行目)。error."これで404エラーコードはすべてテンプレートの「404.html」にレスポンスされます。404.htmlひとまず、404.htmlは、以下のようにしてみました。<p>お探しのページが見つかりませんでした。Found.</h2><hr><p>お探しのページが見つかりませんでした。%}これで、ルーティングしていないURLにアクセスすると、今追加した404.htmlが表示されると思います。スマートな方法ではありませんが、大きな変更ではないのでひとつの案としてご紹介しました。おわりに【第4回】ここまでの内容で、Pollsアプリケーションは、最低限の機能の実装を終えました。投票の一覧も確認できて、投票もできて、結果も確認できるようになりました。質問や選択肢を追加したり、変更したり、削除もできます。次は、少し内容が変わって、自動テストについてのチュートリアルに移ります。内容が内容なだけに距離をおきがちですが、このチュートリアルでは大したことはやらないので、これを機に自動テストについて理解を深めていきましょう。urls.py第5回に続く第5回はこちらになります。前回の記事の続きとなります。前回の記事の続きとなります。後編では、さらに機能を追加していきたいと思います。社長と一杯飲みながらお話してみたい方はこちらミツオカフリーランスエンジニア様の募集はこちらにゃんこ師匠その他、お問い合わせはこちらミツオカお気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!一緒に働いてくれる仲間を募集しております!ライトコードでは、仲間を募集しております!当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。「好きなことを仕事にするエンジニア集団」の(株)ライトコードのメディア編集部が書いている記事です。rightcodeエンジニア大募集中!私たちライトコードでは、エンジニアを募集しております。私服大歓迎のカジュアルな職場なので、お気軽にご応募ください!また、フリーエンジニアの方も募集しております。