def get_find_response_normal_field_dict(model): """ :param model: :return: """ normal_fields = get_normal_field_list_by_model(model) # 普通字段 find_response_allow_fields = {} for normal_field in normal_fields: response_key = newbee_model.get_attr_by_model_field_key( model, normal_field, "response_key") can_found = newbee_model.get_attr_by_model_field_key( model, normal_field, "can_found") is_found_as_foreign_return = newbee_model.get_attr_by_model_field_key( model, normal_field, "is_found_as_foreign_return") if can_found: find_response_allow_fields[normal_field] = { "response_key": response_key or normal_field, "is_found_as_foreign_return": is_found_as_foreign_return, } return find_response_allow_fields
def get_find_request_allow_field_dict(model): """ :param model: :return: """ normal_fields = get_normal_field_list_by_model(model) # 普通字段 many_to_many_fields = get_many_to_many_field_list_by_model(model) # 多对多字段 find_request_allow_field_dict = {} for normal_field in normal_fields: request_key = newbee_model.get_attr_by_model_field_key( model, normal_field, "request_key") can_find_by_self = newbee_model.get_attr_by_model_field_key( model, normal_field, "can_find_by_self") find_by_self_key = newbee_model.get_attr_by_model_field_key( model, normal_field, "find_by_self_key") is_found_as_foreign_return = newbee_model.get_attr_by_model_field_key( model, normal_field, "is_found_as_foreign_return") if can_find_by_self: find_request_allow_field_dict[normal_field] = { "request_key": request_key, "find_by_self_key": find_by_self_key or request_key or normal_field, "is_found_as_foreign_return": is_found_as_foreign_return, } for many_to_many_field in many_to_many_fields: request_key = newbee_model.get_attr_by_model_field_key( model, many_to_many_field, "request_key") can_find_by_self = newbee_model.get_attr_by_model_field_key( model, many_to_many_field, "can_find_by_self") find_by_self_key = many_to_many_field # 可能要加上__id if can_find_by_self: find_request_allow_field_dict[many_to_many_field] = { "request_key": request_key, "find_by_self_key": find_by_self_key, } return find_request_allow_field_dict
def add_util(request, action, write_database_func=None): """ 执行增加业务时 你需要调用的方法 :param request: 前端发送的请求 :param action: 路径传参携带的action :param write_database_func: 你可以重写写入数据库的方法 填到此项 :return: """ # 获取json字典 json_data = get_request_body_dict(request) # 获取model model = get_model_by_model_info(action) # 获取增加业务默认的字典 add_default_dict = get_add_default_dict(action) # 获取增加成功时返回的data格式 write_success_return_data_form = get_write_success_return_data_form(action) # 查询该action是否可以执行增加业务 can_add = get_can_add(action) if not model: return { "msg": "找不到%s模型" % action, "status": "FAIL", "type": action, "code": 404 }, 404 if not can_add: return { "msg": "%s模型不允许进行增加操作" % action, "status": "FAIL", "type": action, "code": 500 }, 500 # 组合字典 add_dict = get_add_dict(add_default_dict, request) many_to_many_dict = {} # 非空验证 # 获取 该 model的所有字段 看哪个 新增 要求 必传 normal_fields = get_normal_field_list_by_model(model) logger.debug("增加操作的普通字段为:%s " % normal_fields) for field in normal_fields: # 获取key request_key = newbee_model.get_attr_by_model_field_key( model, field, "request_key") if not request_key: request_key = field # 先看允许传递该字段吗 allow_request_field = newbee_model.get_attr_by_model_field_key( model, field, "new_bee_can_add") if not allow_request_field: # 看看前端是否传递了 re_value = json_data.get(request_key) if re_value: return_data_f = status_dict.get_FAIL_BY_PARA_TYPE_4001( msg="%s字段不能传递数据" % request_key) return_data_f.update({ "status": "FAIL", "type": action, }) return return_data_f, 400 else: continue # 必传验证 if newbee_model.get_attr_by_model_field_key(model, field, "is_add_tran"): # 必传 去验证 require_field = json_data.get(request_key) if not require_field: # 必传验证失败 return_data_f = status_dict.get_FAIL_BY_PARA_NOT_ALL_4000( msg="%s字段为必传字段" % request_key) return_data_f.update({ "status": "FAIL", "type": action, }) return return_data_f, 400 # 普通字段 try: normal_field_value = json_data[request_key] except: continue else: create_key = newbee_model.get_attr_by_model_field_key( model, field, "new_bee_add_key") if not create_key: create_key = request_key add_dict[create_key] = normal_field_value many_to_many_fields = get_many_to_many_field_list_by_model(model) children_field_list = get_children_field_list_by_model(model) many_to_many_fields += children_field_list # 多对多字段 for many_to_many_field in many_to_many_fields: # 获取key request_key = newbee_model.get_attr_by_model_field_key( model, many_to_many_field, "request_key") if not request_key: request_key = many_to_many_field many_to_many_request_value = json_data.get(request_key) # 如果前端没有传递该多对多对象 if not many_to_many_request_value: continue create_key = newbee_model.get_attr_by_model_field_key( model, many_to_many_field, "new_bee_add_key") if not create_key: create_key = request_key many_to_many_dict[create_key] = many_to_many_request_value add_re_realte_dict_list = get_add_re_realte_dict_list(action) if add_re_realte_dict_list: for add_re_realte_dict in add_re_realte_dict_list: if add_re_realte_dict: for rek, rev in add_re_realte_dict.items(): many_to_many_request_value = json_data.get(rek) # 如果前端没有传递该多对多对象 if many_to_many_request_value != [] and not many_to_many_request_value: continue many_to_many_dict[rev] = many_to_many_request_value # 执行数据库操作 增加记录 生成多对多关系 return_data_key = [k for k, v in write_success_return_data_form.items()][0] return_data_form = write_success_return_data_form.get(return_data_key) logger.debug("增加字典是:%s" % add_dict) default_add_data_to_database = get_default_add_data_to_database( action=action) if write_database_func: return write_database_func(model, add_dict, many_to_many_dict, return_data_key, return_data_form, default_add_data_to_database) else: return add_data_to_database(model, add_dict, many_to_many_dict, return_data_key, return_data_form, default_add_data_to_database)
def update_util(request, action, func=None): """ 执行更新业务时 你需要调用的方法 :param request: 前端发送的请求 :param action: 路径传参携带的action :param func: 你可以重写写入数据库的方法 填到此项 :return: """ # 解析request数据 先转json json_data = get_request_body_dict(request) # 转json成功 # 拿到model信息 model = get_model_by_model_info(action) update_default_dict = get_update_default_dict(action) write_success_return_data_form = get_write_success_return_data_form(action) find_for_write_default_dict = get_find_for_write_default_dict( request, action) can_update = get_can_update(action) if not model: return { "msg": "找不到%s模型" % action, "status": "FAIL", "type": action, "code": 404 }, 404 if not can_update: return { "msg": "%s模型不允许进行修改操作" % action, "status": "FAIL", "type": action, "code": 500 }, 500 # 组合字典 update_dict = get_update_dict(update_default_dict, request) many_to_many_dict = {} # 非空验证 # 获取 该 model的所有字段 看哪个 新增 要求 必传 normal_fields = get_normal_field_list_by_model(model) for field in normal_fields: # 获取key request_key = newbee_model.get_attr_by_model_field_key( model, field, "request_key") if not request_key: request_key = field # 先看允许传递该字段吗 allow_request_field = newbee_model.get_attr_by_model_field_key( model, field, "new_bee_can_update") if not allow_request_field: # 看看前端是否传递了 re_value = json_data.get(request_key) if re_value: return_data_f = status_dict.get_FAIL_BY_PARA_TYPE_4001( msg="%s字段不能传递数据" % request_key) return_data_f.update({ "status": "FAIL", "type": action, }) return return_data_f, 400 else: continue # 必传验证 if newbee_model.get_attr_by_model_field_key(model, field, "new_bee_is_update_tran"): # 必传 去验证 require_field = json_data.get(request_key) if not require_field: # 必传验证失败 return_data_f = status_dict.get_FAIL_BY_PARA_NOT_ALL_4000( msg="%s字段为必传字段" % request_key) return_data_f.update({ "status": "FAIL", "type": action, }) return return_data_f, 400 # 普通字段 try: normal_field_value = json_data[request_key] except: continue else: create_key = newbee_model.get_attr_by_model_field_key( model, field, "new_bee_update_key") if not create_key: create_key = request_key update_dict[create_key] = normal_field_value many_to_many_fields = get_many_to_many_field_list_by_model(model) children_field_list = get_children_field_list_by_model(model) many_to_many_fields += children_field_list # 多对多字段 for many_to_many_field in many_to_many_fields: # 获取key request_key = newbee_model.get_attr_by_model_field_key( model, many_to_many_field, "request_key") if not request_key: request_key = many_to_many_field many_to_many_request_value = json_data.get(request_key) # 如果前端没有传递该多对多对象 if many_to_many_request_value == []: create_key = newbee_model.get_attr_by_model_field_key( model, many_to_many_field, "new_bee_update_key") if not create_key: create_key = request_key many_to_many_dict[create_key] = [] elif many_to_many_request_value == None: continue else: create_key = newbee_model.get_attr_by_model_field_key( model, many_to_many_field, "new_bee_update_key") if not create_key: create_key = request_key many_to_many_dict[create_key] = many_to_many_request_value update_re_realte_dict_list = get_update_re_realte_dict_list(action) logger.debug("update_re_realte_dict_list: % s" % update_re_realte_dict_list) if update_re_realte_dict_list: for update_re_realte_dict in update_re_realte_dict_list: if update_re_realte_dict: for rek, rev in update_re_realte_dict.items(): many_to_many_request_value = json_data.get(rek) # 如果前端没有传递该多对多对象 if many_to_many_request_value != [] and not many_to_many_request_value: continue many_to_many_dict[rev] = many_to_many_request_value # 执行数据库操作 增加记录 生成多对多关系 return_data_key = [k for k, v in write_success_return_data_form.items()][0] return_data_form = write_success_return_data_form.get(return_data_key) default_update_data_to_database = get_default_update_data_to_database( action) if func: return func(model, find_for_write_default_dict, update_dict, many_to_many_dict, return_data_key, return_data_form, default_update_data_to_database) return update_data_to_database(model, find_for_write_default_dict, update_dict, many_to_many_dict, return_data_key, return_data_form, default_update_data_to_database)