项目地址:
前端: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代码有用还请点赞!】