現状
現在flask
とpeewee
というormライブラリを使用しています。
その際にカラム名が違うだけのクラスが多く存在し、クラスを作る際にはif文で無理矢理条件分岐後に変数に代入して、それを利用する形で書いています。
#1つめの問題
python
1def return_this(foreign): 2 if (foreign == 'types'): 3 return [Type(), 'type'] 4 elif (foreign == 'groups'): 5 return [Group(), 'group'] 6 elif (foreign == 'categories'): 7 return [Category(), 'category'] 8 elif (foreign == 'formats'): 9 return [Format(), 'format'] 10 elif (foreign == 'attributes'): 11 return [Attribute(), 'attribute'] 12 else: 13 return 14 15 16def get_foreign(foreign): 17 data = [] 18 19 this = return_this(foreign) 20 this_Class = this[0] 21 22 for x in this_Class.select().order_by(this_Class.id).dicts(): 23 data.append(x) 24 25 return jsonify(data)
これを綺麗に書く方法はありますでしょうか?
#2つめの問題
python
1def post_foreign(foreign, request): 2 this = return_this(foreign) 3 this_Class = this[0] 4 key = this[1] 5 6 this_Class.create( 7 type=request.form[key], ---① 8 created_at=datetime.datetime.now(), 9 updated_at=datetime.datetime.now() 10 ) 11 12 return returnResultCreate()
①の部分でtype
の部分を動的に変えたいと思っています。
値自体はreturn_this()
の返り血がlistになっており、index 1に格納されているためそれを使えれば良いのですが、変数展開のようなものができません。
思いついたものはexec()
やeval()
ですがこのようなものは使用したくありません。
どうにか対処方法を教えてください。
追記(2つめの問題)
python
1def post_foreign(foreign, request): 2 if (foreign == 'types'): 3 Type.create( 4 type=request.form['type'], 5 created_at=datetime.datetime.now(), 6 updated_at=datetime.datetime.now() 7 ), 8 elif (foreign == 'groups'): 9 Group.create( 10 group=request.form['group'], 11 created_at=datetime.datetime.now(), 12 updated_at=datetime.datetime.now() 13 ), 14 elif (foreign == 'categories'): 15 Category.create( 16 category=request.form['category'], 17 created_at=datetime.datetime.now(), 18 updated_at=datetime.datetime.now() 19 ), 20 elif (foreign == 'formats'): 21 Format.create( 22 format=request.form['format'], 23 created_at=datetime.datetime.now(), 24 updated_at=datetime.datetime.now() 25 ), 26 elif (foreign == 'attributes'): 27 Attribute.create( 28 attribute=request.form['attribute'], 29 created_at=datetime.datetime.now(), 30 updated_at=datetime.datetime.now() 31 ), 32 else: 33 return returnError404() 34 35 return returnResultCreate()
わかりづらく申し訳ありませんでした。
正確には、上記のようにType, Group, Category, Format, Attribute
とその中身の一部が違うだけで基本は同じです。
このコードのメンテナンスコストとタイプ量を減らしたいと考えています。