第16章 より 高度なフォーム
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
より高度なフォームの使用法を見ていこう。 ユーザがリスト項目を空白にしないよう支援できたので、今度は重複も回避できるようにしよう.
これまでの検証制約は空白項目の防止が主目的だった。覚えているかもしれないが、フロントエンドでこれを強制するのは非常に簡単だった。しかし重複項目の防止はフロントエンドでは単純ではない(もちろん不可能ではないが)。だからこの章ではサーバ側検証に重点を置き、バックエンドからUIへエラーを伝播させる手法を扱う。
この章ではDjangoのフォームフレームワークの詳細な仕組みを扱う。 DjangoフォームのカスタマイズやUIへのエラー表示方法が既に理解できている場合、 あるいはDjangoではなくTDDを学ぶために本書を読み取っている場合は、 この章をざっと読み飛ばすことを公式に許可する。
Djangoをまだ学んでいる最中なら、ここには有益な内容がある! ざっと読み取るだけでも構わない。 最後に「開発者のうっかりミスをテストするタイミングについての補足」と 「まとめ:ビューで何をテストすべきか」は必ず確認しておいてほしい。
重複アイテム用の別のFT
ItemValidationTest に2つ目のテストを追加し、
ユーザがToDoリストに同じ項目を二度入力しようとした時の
動作について少し説明を加える:
src/functional_tests/test_list_item_validation.py (ch16l001)
deftest_cannot_add_duplicate_items(self):# Edith goes to the home page and starts a new listself.browser.get(self.live_server_url)self.get_item_input_box().send_keys("Buy wellies")self.get_item_input_box().send_keys(Keys.ENTER)self.wait_for_row_in_list_table("1: Buy wellies")# She accidentally tries to enter a duplicate itemself.get_item_input_box().send_keys("Buy wellies")self.get_item_input_box().send_keys(Keys.ENTER)# She sees a helpful error messageself.wait_for(lambda:self.assertEqual(self.browser.find_element(By.CSS_SELECTOR,".invalid-feedback").text,"You've already got this in your list",))
なぜ一つのテストメソッドを拡張したり、 新しいファイルやクラスを作成したりせずに、 二つ使うのか? これは判断の問題だ。この二つは密接に関連している。 どちらも同じ入力フィールドの検証に関するものだから、 同じファイルにまとめるのが適切に思える。 一方で、論理的には十分に分離されているため、 別々のメソッドに分割するのが現実的だ: ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access