大家好,py 新手一个. 因工作需要,最近在用 py 的 requests 去调用一个系统的 restful api,写的过程中有些小疑问.同时也深感自己 py 功力的不足. 希望路过的大佬能就下面的问题,例子指点下 .多多包涵, 谢谢!
像 TestA 下 create 方法中的 data 参数, 目前指定了几个参数. 但是个人考虑到将来可能需要操作到其他参数, 打算先定义好一个 dict, 里面包括所有官方参数及对应默认值(平均 20-30 个参数吧).如果用户有输入某个指定参数,则有**kwargs 接收该参数,然后更新这个 dict. 然后不用 data. 请问各位大佬这样写好吗?或者有什么好的建议呢??
对于这个调用的 py, 个人思路是写一个通用的父类方法, 然后子类去继承. 再根据不同对象,更新不同的参数, 最后直接调用该子类即可.但是发现好像老是在重复写一些东西, 感觉不简洁, 很笨.麻烦大佬就下面的代码指点下, 应该从哪些方面来优化下. 或者说下小弟的不足之处, 指点下学习的方向.
附简易代码 (命名临时随便写的) :
# 通用方法
class Base(object):
def read(self, module_name, data, object_name=None, key_name=None):
url = self.generate_addr(module_name, object_name, key_name)
res = self.session.get(url)
return res
def create(self, module_name, data, object_name=None, key_name=None):
url = self.generate_addr(module_name, object_name, key_name)
res = self.session.post(url, data=data)
return res
# 具体对象
class TestA(Base):
def __init__(self, address, **kwargs):
super(TestA, self).__init__(address, **kwargs)
self.test_module = 'test'
def read(self, **kwargs):
url = self.generate_addr(self.test_module, **kwargs)
res = self.session.get(url)
return res
def create(self, data, **kwargs):
# 用于生成系统所需的数据
def create_data(data):
def data_one():
payload = {'b':'2'}
payload['a'] = data['1']
return {'module_name':self.test_module, 'payload':payload, 'key_index':None}
def data_two():
module_name = 'another_test'
payload = {}
payload['a1'] = data['1']
key_index = 1
return {'module_name':module_name, 'payload':payload, 'key_index':key_index}
return data_one(), data_two()
items = create_data(data)
# 此处有想过用列表生成式, 但感觉不好写
res_dict = []
for item in items:
url = self.generate_addr(item['module_name'],key_name=item['key_index'])
res = self.session.post(url, data=item['payload'])
res_dict.append(res)
return res_dict
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.