コード例 #1
0
ファイル: crud.py プロジェクト: tchigher/newbee
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
コード例 #2
0
ファイル: crud.py プロジェクト: tchigher/newbee
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
コード例 #3
0
ファイル: crud.py プロジェクト: tchigher/newbee
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)
コード例 #4
0
ファイル: crud.py プロジェクト: tchigher/newbee
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)