从0开始,重新赋能造数平台!(4)编写项目模块后端逻辑

107 阅读2分钟

项目地址:

前端:gitee.com/luxinyu617/… 后端:gitee.com/luxinyu617/…

这次主要是修改了后端框架(Django->Flask),然后自己也还是初学,可能代码里废话很多,后续可以继续优化(根据名称搜索还没做,暂时放一下,主要是查重校验)

模型

class Project(BaseModel):
    __tablename__ = 'project'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20))
    description = db.Column(db.String(200),nullable=True)
    create_time = db.Column(db.DateTime, default=datetime.datetime.now)
    update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now)
    is_del = db.Column(db.Integer, default=0)

def __init__(self, name, description):
    self.name = name
    self.description = description

def __repr__(self):
    return '<Project %r>' % self.name

然后学着写了一下dao层和controller,我们这里是dao和views

dao层

class ProjectDao:
    """
    Project DAO
    """
    def __init__(self):
        self.session = session

    def get_projects(self,pageNum=1,pageSize=10):
        """
        Get all projects
        """
        pageNum = int(pageNum)
        pageSize = int(pageSize)
        query = self.session.query(Project).filter(Project.is_del == 0)
        total = query.count()
        max_page = (total + pageSize - 1) / pageSize
        if  int(pageNum) > max_page:
            return []
        else:
            return total,query.order_by(Project.update_time.desc()).paginate(page=int(pageNum), per_page=int(pageSize))

    def get_project(self, project_id):
        """
        Get a project by name
        """
        return self.session.query(Project).filter(Project.is_del == 0).filter(Project.id == project_id).one().as_dict()

    def create_project(self, name,description):
        """
        Create a project
        """
        project = Project(name=name,description=description)
        self.session.add(project)
        self.session.commit()

    def update_project(self, project_id,project_new_name,project_desc):
        """
        Update a project
        """

        project = self.session.query(Project).filter(Project.is_del == 0).filter(Project.id == project_id).first()
        if project:
            project.name = project_new_name
            project.description = project_desc
            self.session.commit()
            return project
        else:
            return None

    def delete_project(self, project_id):
        """
        Delete a project
        """
        project = self.session.query(Project).filter(Project.is_del == 0).filter(
            Project.id == project_id).first()
        if project:

            project.is_del = True
            self.session.commit()
            return project
        else:
            return None
    def name_duplicate(self,name):
        return is_duplicate(Project, ['name','is_del'], [name,0])

views层

@datafactory_bp.route('/project',methods=['POST'])
def create_project():
    project_name = request.json.get('name')

    if project_dao.name_duplicate(project_name):
        return jsonify({'code':400,'msg':'项目名称重复'})
    project_desc = request.json.get('description')

    project = project_dao.create_project(project_name,project_desc)

    return jsonify({'code':200,'msg':'创建成功'})

@datafactory_bp.route('/project/<int:id>',methods=['DELETE'])
def del_project(id):

    project = project_dao.delete_project(id)
    if project:
        return jsonify({'code':200,'msg':'删除成功'})
    else:
        return jsonify({'code':400,'msg':'项目不存在'})

@datafactory_bp.route('/project/<int:id>',methods=['PUT'])
def update_project(id):
    project_id = id
    project_new_name = request.json.get('name')
    project_name = project_dao.get_project(project_id).get('name')




    if project_new_name!= project_name and project_dao.name_duplicate(project_new_name):
        return jsonify({'code':400,'msg':'项目名称重复'})
    #
    project_desc = request.json.get('description')
    project = project_dao.update_project(project_id,project_new_name,project_desc)
    if project:
        return jsonify({'code':200,'msg':'修改成功'})
    else:
        return jsonify({'code':400,'msg':'项目不存在'})

#查列表
@datafactory_bp.route('/project',methods=['GET'])
def get_project_list():
    pageNum = request.args.get('pageNum')
    pageSize = request.args.get('pageSize')
    total,project_list = project_dao.get_projects(pageNum,pageSize)
    projects = obj_to_dict(project_list.items)

    return jsonify({'code': 200, "data": {"records":projects,"total":total}})
#查单个信息
@datafactory_bp.route('/project/<int:id>',methods=['GET'])
def get_project(id):

    project = project_dao.get_project(id)


    return jsonify({'code': 200, "data": project})

详细可以查看gitee 【觉得我的shishan代码有用还请点赞!】