質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

530閲覧

Django クラスTemplateViewを使った処理でif文を関数に

Abenosan

総合スコア25

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/11/02 08:20

編集2018/11/02 08:41

Python歴一か月

仮に

  • ToDoリストのタスク完了画面を想定
  • ブラウザの一つの画面から3つのボタンが用意されてる。
  • ボタン3つ処理が異なる。

1つめのボタン
選択された完了タスクをToDoリストに戻す。
2つめのボタン
選択された完了タスクをDB上から削除。
3つめのボタン
完了タスクをすべてDBから削除

現在のコード

class task_end(TemplateView): """ タスク完了画面""" def get(self,request): ~~~省略~~~ def post(self, request): """各POSTからのボタンに対する処理""" # 完了したタスクを ToDoリストに戻す if 'task_in' in request.POST: tasks = task.objects.get(id=request.POST['id']) tasks.status = False tasks.save() # 完了したタスクを1件をDBから削除 elif 'task_delete' in request.POST: tasks = task.objects.get(id=request.POST['id']) tasks.delete() # 完了したタスクのリスト全てを削除 elif 'task_all_delete' in request.POST: tasks = task.objects.all().filter(users=request.session['u_s_id'], status=True) tasks.delete() return redirect('task_end')

この場合ブラウザからのPOST処理に対して、if文で処理を分岐しています。
実際ブラックボックスで動かすと問題はないのですが、本当にこのような分岐方法でいいのか?

他に間違いなくいい方法があると思います。
もしよろしければアドバイス等よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ベストな解はわかりませんが、
辞書を使う方法があります。

python

1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3import unittest 4 5 6class TestSwitch(unittest.TestCase): 7 8 def test_if(self): 9 """if での複数条件分岐""" 10 key = 'a' 11 if key == 'a': 12 print 'a' 13 self.assertEqual('a', key) 14 elif key == 'b': 15 print 'b' 16 self.assertEqual('b', key) 17 else: 18 print 'other' 19 self.assertNotIn(('a', 'b'), (key,)) 20 21 def test_dict(self): 22 """dict での複数条件分岐""" 23 key = 'a' 24 25 def key_a(key): 26 print 'a' 27 self.assertEqual('a', key) 28 29 def key_b(key): 30 print 'b' 31 self.assertEqual('b', key) 32 33 def key_other(key): 34 print 'other' 35 self.assertNotIn(('a', 'b'), (key,)) 36 37 key_dict = { 38 'a': key_a, 39 'b': key_b 40 } 41 42 key_dict.get(key, key_other)(key) 43 44if __name__ == '__main__': 45 unittest.main()

引用元
http://www.sakito.com/2012/09/python-switch-case.html

辞書に関数を登録しておいて、キーで取得できた関数を実行することで
swich文ぽいことをします。

投稿2018/11/02 09:27

miyasaka

総合スコア271

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問