如果用户以json格式提供输入数据,我正在尝试将详细信息与数据库匹配。我们必须检查密钥,如果密钥存在于数据中(我们拥有),则应该进行一些预处理并返回结果。 我正在创建一个API,该API根据需要返回。
我在这里使用了多个if语句,但是我想减少代码,有什么办法做到这一点?
下面是我的参考代码
@app.route('/api',methods=['GET'])
def aadhar_pan_users_check():
data=request.get_json()
aadhar=data.get('aadhar')
pancard=data.get('pan')
fname = data.get('firstName')
lname = data.get('lastName')
gender = data.get('gender')
cust_type = data.get('cust_type')
dob = data.get('dob')
res=[]
if aadhar!=None and pancard!=None:
res.append((aadhar_check(aadhar), pan_check(pancard)))
return str(res)
elif pancard!=None:
return str(pan_check(pancard))
elif aadhar!=None:
return str(aadhar_check(aadhar))
# return jsonify({'aadhar': str(aadhar_check(aadhar))})
elif fname!=None and lname!=None and gender!=None and cust_type!=None and dob!=None and aadhar!=None and pancard!=None:
ret=[fname,lname,gender,cust_type,dob, aadhar, pancard]
ret_ty=[formatting_data['fname'],formatting_data['lname'],formatting_data['gen'],formatting_data['client_type'],formatting_data['dob'],formatting_data['aadhar'],formatting_data['pan']]
# print(ret_ty)
return (preprocess_user_data(ret,ret_ty),aadhar_check(aadhar),pan_check(pancard))
elif fname!=None and lname!=None and gender!=None and cust_type!=None:
ret=[fname,lname,gender,cust_type]
ret_ty=[formatting_data['fname'],formatting_data['lname'],formatting_data['gen'],formatting_data['client_type']]
# print(ret_ty)
return preprocess_user_data(ret,ret_ty),aadhar_check(aadhar)
elif fname!=None and lname!=None and gender!=None:
ret=[fname,lname,gender]
ret_ty=[formatting_data['fname'],formatting_data['lname'],formatting_data['gen']]
# print(ret_ty)
return preprocess_user_data(ret,ret_ty)
elif fname!=None and lname!=None and dob!=None:
ret=[fname,lname,dob]
print(1000*'3')
ret_ty=[formatting_data['fname'],formatting_data['lname'],formatting_data['dob']]
return preprocess_user_data(ret,ret_ty),aadhar_check(aadhar)
elif fname!=None and lname!=None:
ret=[fname,lname]
ret_ty=[formatting_data['fname'],formatting_data['lname']]
# print(ret_ty)
return preprocess_user_data(ret,ret_ty)
elif fname!=None and lname!=None and cust_type!=None and dob!=None:
ret=[fname,lname,gender,cust_type,dob]
print(1000*'4')
ret_ty=[formatting_data['fname'],formatting_data['lname'],formatting_data['client_type'],formatting_data['dob']]
# print(ret_ty)
return preprocess_user_data(ret,ret_ty),aadhar_check(aadhar)
elif fname!=None and lname!=None and gender!=None and cust_type!=None:
ret=[fname,lname,gender,cust_type]
print(1000*'5')
ret_ty=[formatting_data['fname'],formatting_data['lname'],formatting_data['gen'],formatting_data['client_type']]
# print(ret_ty)
return preprocess_user_data(ret,ret_ty),aadhar_check(aadhar)
elif fname!=None:
ret=[fname]
print(type(fname))
ret_ty=[formatting_data['fname']]
# print(ret_ty)
return preprocess_user_data(ret,ret_ty)
else:
return "Something wrong"
我有一些有助于预处理的功能。
答案 0 :(得分:2)
我尚不清楚您的代码在做什么100%,但是您似乎正在检查aadhar或pancard是否为None-如果它们为None,则返回一些字符串表示形式-然后使用任何其他信息提供了。
使用它,您是否可以循环遍历“额外”数据(如果存在),将其追加到列表中,如果不存在,则不执行任何操作?
然后照常返回preprocess_function。
如下所示:
def aadhar_pan_users_check():
data=request.get_json()
aadhar=data.get('aadhar')
pancard=data.get('pan')
cust_data = {
'fname' : data.get('firstName'),
'lname' : data.get('lastName'),
'gen' : data.get('gender'),
'client_type' : data.get('cust_type'),
'dob' : data.get('dob')
}
res = []
ret = []
ret_ty = []
for key,value in cust_data.items():
if value is not None:
ret.append(value)
ret_ty.append( formatting_data[key] )
if (pan is not None) and (aadhar is not None):
check_result = 'YOUR_CODE_HERE' # your_code_here
elif (pan is not None) and (aadhar is None):
check_result = pan_check(pan)
elif (pan is None) and (aadhar is not None):
check_result = aadhar_check(aadhar)
else:
check_result = None
if len(ret) == 0:
preprocess_result = None
else:
preprocess_result = preprocess_user_data(ret,ret_ty)
return preprocess_result, check_result
我认为函数现在应该这样做:
如果两者都不是None:您需要填写,我不知道您期望什么行为。 如果pan不为None,则aadhar为None:保留'check_pan'函数的结果。 如果aadhar不为None,则pan为None:类似于pan 如果两者都不存在:检查结果保留为None。
如果有可用的客户数据,请重新使用预处理功能。 如果没有客户数据,请保留“无”作为预处理功能的结果。
然后:
返回预处理功能和check_function的结果。
if / else比以前的功能要多,但我认为现在的目的很明确。
我没有任何示例数据可以测试此操作,因此请考虑使用此“伪代码”。
通常应该比较is not None
而不是`!= None,例如,请参见What is the difference between " is None " and " ==None "