fbpx
  1. HOME
  2. ブログ
  3. IT技術
  4. 【Python】[第7回:後編] Responderを使ってDjangoチュートリアルをやってみた【adminページ改良編】

【Python】[第7回:後編] Responderを使ってDjangoチュートリアルをやってみた【adminページ改良編】

Responderを使ってDjangoチュートリアルをやってみた~第7回:後編~

後編では、さらに機能を追加していきたいと思います。

前編はこちらになります。

検索機能をつける

「質問がどんどん増えていった結果、見つけたい質問が見つけづらくなってしまった…」

サイト運営でよくありそうな展開です。

そんな時は、検索機能があると便利ですね。

例えば、「過去7日間の質問」や「今月の質問」などの投稿日フィルタ

または、質問のテキストを検索する機能が望ましいですね。

Responder や SQLAlchemy の扱いに慣れてきている読者の皆様には、さほど難しい話ではないはずです!

投稿日のフィルタ機能を実装

投稿日のフィルタは、GETメソッド(URLQuery parameter または Query Strings ともいう)を使ってみましょう。

URLでたまにみると思いますが、「http://example.com?param=10」がそれにあたります。

Responder での URLクエリパラメータ の扱い方を考える前に、ビューだけ先に作ってしまいたいと思います。

ビューの修正

それでは、templates/administrator.html を修正していきましょう!

最終的な修正後コードは、以下に示しますが、修正・加筆箇所が少しややこしいので先にポイントを列挙しておきます。

  1. Bootstrap4のグリッド機能( <div class="row"> や <div class="col-md-X"> )でレイアウト調整(ひとまず9:3)
  2. 上記のグリッドの「9」に今までのテーブルを、「3」に検索機能のリストを表示させる
  3. 検索リストはBootstrapの「list-groupクラス」でデザイン

コード

確認

完成したビューは、以下のようになるはずです。

(ビューはなんでも良いのでコピペでOKです)

コントローラ @api.route(‘/admin_top’)の修正

では、検索機能を実装していきます。

まず、URLクエリは、Responder において、 req.param という辞書型変数に格納されます。

したがって取得するには、例えば「filter」という変数ならば、 req.param['filter'] や req.param.get('filter') のような形で取り出せます。

このようなコントローラで良いでしょう!

(追記部分には「New!」と書いてあります)

URLクエリで受け取ったものは、文字列(string)なので、整数として扱う場合は int() でキャストします。

質問テキスト検索を実装

それでは、次に「文字検索機能」を実装していきます。

まずは、ビューを適当に作りましょう。

ビューの作成

先ほどの「投稿日検索」のリストの上部にテキストボックスを作ります。

コントローラ修正

文字列検索もGETで受け取るようにしたので、先ほどと同じようにコントローラを修正しましょう。

また、GETで受け取る以上、URL操作で2つ(投稿日検索と文字列検索)の検索を同時にかけることも可能です。

(http://127.0.0.1:5042/admin_top?q_str=how&filter=300 のようなURLクエリ)

したがって、全通りのクエリ操作を実装していきます。

実装は面倒ですが、やっていることはさほど難しくありません。

文字列検索は、LIKE演算子を使いますが、SQLAlchemyでは like() 関数が用意されています。

実装

実装は、以下のようにできます。

確認

LIKE演算子によるものなので、日本語の検索複雑な文字列検索には上手く対応できないかもしれません。

Djangoのチュートリアルにもある通り、常識的な範囲で使いましょう。

さいごに【第7回】

お疲れ様でした!

これでResponderで追うDjangoチュートリアルが一通り終わりました!

この全7回を通して、「Responderの使い方」「SQLAlchemyの使い方」「Jinja2テンプレートエンジンの使い方」「Webアプリの基礎」など色々な知識が身についたと思います。

この連載で作成したアプリケーションは、まだまだ改良の余地があります。

しかし、ここまで一緒に実装してきた皆さんなら、より良いアプリケーション作りができるはずです。

Responderには、今回の連載では紹介しきれなかった、Responderの強み(非同期処理など)がまだまだあります。

また別の機会で、ご紹介できたらと思っています!

いちおう、本記事の第7回で終了ですが、「もう少しアプリケーションに工夫を加えるとしたら?」というようなコンセプトで、番外編に続きます。

お楽しみに!

関連記事

ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

関連記事