wip:(重构接口实现方式2)

This commit is contained in:
zhengxinonly
2022-05-10 01:13:37 +08:00
parent 82de7b0273
commit 7e6aecc99b
8 changed files with 144 additions and 134 deletions
+2 -3
View File
@@ -12,13 +12,12 @@ from extensions import init_plugs
api_bp: Blueprint = Blueprint('api', __name__, url_prefix='/api/v1') api_bp: Blueprint = Blueprint('api', __name__, url_prefix='/api/v1')
from .rights import register_rights_api from .rights import register_rights_api
from .system import FilePhotoAPI, LoginAPI from .system import register_sys_api
from .users import register_users_api from .users import register_users_api
register_rights_api(api_bp) register_rights_api(api_bp)
register_users_api(api_bp) register_users_api(api_bp)
register_api(LoginAPI, 'login_api', '/passport/login', pk='_id', app=api_bp) register_sys_api(api_bp)
register_api(FilePhotoAPI, 'photo_api', '/file/photo', pk='photo_id', app=api_bp)
def init_api(app: Flask) -> None: def init_api(app: Flask) -> None:
+35 -21
View File
@@ -1,28 +1,42 @@
from flask_restful import Api from common import register_api
from .department import DepartmentsApi, DeptEnableAPI
from .department import DepartmentsResource, DepartmentResource, DeptEnableResource
from .rights import ( from .rights import (
RightRightsResource, RightPowerResource, RightPowerEnableResource, AdminConfigsResource, RightsApi, PowerApi, right_power_enable_resource,
AdminMenuResource admin_configs_resource, admin_menu_resource
) )
from .roles import RoleRolesResource, RoleRoleResource, RoleEnableResource, RolePowerResource from .roles import RoleRoleApi, RolePowerApi, role_deletes, role_enable_resource
def register_rights_api(api_bp): def register_rights_api(api_bp):
dept_api = Api(api_bp, prefix='/dept') register_api(DepartmentsApi, 'rights_dept_api', '/dept/department/', pk='dept_id', app=api_bp)
dept_api.add_resource(DepartmentsResource, '/departments') api_bp.add_url_rule('/dept/department/<int:dept_id>/status',
dept_api.add_resource(DepartmentResource, '/department/<int:dept_id>') view_func=DeptEnableAPI.as_view('dept_status_api'),
dept_api.add_resource(DeptEnableResource, '/department/<int:dept_id>/status') methods=['PUT', ])
api_bp.add_url_rule('/rights/rights',
view_func=RightsApi.as_view('dept_rights_api'),
methods=['GET', 'DELETE'])
rights_api = Api(api_bp, prefix='/rights') register_api(PowerApi, 'rights_power_api', '/power/', pk='_id', app=api_bp)
rights_api.add_resource(RightRightsResource, '/rights') api_bp.add_url_rule('/rights/configs',
rights_api.add_resource(RightPowerResource, '/power/<int:power_id>') endpoint='rights_config_api',
rights_api.add_resource(RightPowerEnableResource, '/power/<int:right_id>/status') view_func=admin_configs_resource,
rights_api.add_resource(AdminConfigsResource, '/configs') methods=['GET'])
rights_api.add_resource(AdminMenuResource, '/menu') api_bp.add_url_rule('/rights/menu',
endpoint='rights_menu_api',
view_func=admin_menu_resource,
methods=['GET'])
api_bp.add_url_rule('/power/<int:right_id>/<action>',
endpoint='rights_power_action_api',
view_func=right_power_enable_resource,
methods=['PUT'])
api_bp.add_url_rule('/roles/role',
endpoint='rights_roles_role_api',
view_func=role_deletes,
methods=['DELETE'])
role_api = Api(api_bp, prefix='/roles') register_api(RoleRoleApi, 'rights_role_api', '/roles/role/', pk='_id', app=api_bp)
role_api.add_resource(RoleRolesResource, '/roles') register_api(RolePowerApi, 'rights_role_power_api', '/roles/role_power/', pk='_id', app=api_bp)
role_api.add_resource(RoleRoleResource, '/role/<int:role_id>') api_bp.add_url_rule('/roles/role/<int:_id>/status',
role_api.add_resource(RoleEnableResource, '/role/<int:role_id>/status') endpoint='rights_roles_enable_api',
role_api.add_resource(RolePowerResource, '/role_power/<int:role_id>') view_func=role_enable_resource,
methods=['PUT'])
+19 -20
View File
@@ -1,14 +1,29 @@
from flask import jsonify from flask import jsonify
from flask_restful import Resource, reqparse from flask.views import MethodView
from flask_restful import reqparse
from common.utils.http import success_api, fail_api from common.utils.http import success_api, fail_api
from extensions import db from extensions import db
from models import DepartmentModel, UserModel from models import DepartmentModel, UserModel
class DepartmentsResource(Resource): class DepartmentsApi(MethodView):
def get(self, dept_id):
if dept_id:
dept = DepartmentModel.query.filter_by(id=dept_id).first()
dept_data = {
'id': dept.id,
'dept_name': dept.dept_name,
'leader': dept.leader,
'email': dept.email,
'phone': dept.phone,
'status': dept.status,
'sort': dept.sort,
'address': dept.address,
}
return dict(success=True, message='ok', dept=dept_data)
def get(self):
dept_data = DepartmentModel.query.order_by(DepartmentModel.sort).all() dept_data = DepartmentModel.query.order_by(DepartmentModel.sort).all()
# TODO dtree 需要返回状态信息 # TODO dtree 需要返回状态信息
res = { res = {
@@ -59,22 +74,6 @@ class DepartmentsResource(Resource):
return success_api(message="成功") return success_api(message="成功")
class DepartmentResource(Resource):
def get(self, dept_id):
dept = DepartmentModel.query.filter_by(id=dept_id).first()
dept_data = {
'id': dept.id,
'dept_name': dept.dept_name,
'leader': dept.leader,
'email': dept.email,
'phone': dept.phone,
'status': dept.status,
'sort': dept.sort,
'address': dept.address,
}
return dict(success=True, message='ok', dept=dept_data)
def put(self, dept_id): def put(self, dept_id):
parser = reqparse.RequestParser() parser = reqparse.RequestParser()
parser.add_argument('address', type=str) parser.add_argument('address', type=str)
@@ -110,7 +109,7 @@ class DepartmentResource(Resource):
return fail_api(message="删除失败") return fail_api(message="删除失败")
class DeptEnableResource(Resource): class DeptEnableAPI(MethodView):
def put(self, dept_id): def put(self, dept_id):
d = DepartmentModel.query.get(dept_id) d = DepartmentModel.query.get(dept_id)
if d: if d:
+24 -27
View File
@@ -2,8 +2,9 @@ import copy
from collections import OrderedDict from collections import OrderedDict
from flask import request, jsonify, current_app from flask import request, jsonify, current_app
from flask.views import MethodView
from flask_login import current_user from flask_login import current_user
from flask_restful import Resource, reqparse from flask_restful import reqparse
from common.utils.http import success_api, fail_api from common.utils.http import success_api, fail_api
from extensions import db from extensions import db
@@ -170,7 +171,7 @@ parser_power.add_argument('powerUrl', type=str, dest='power_url')
parser_power.add_argument('sort', type=int, dest='sort') parser_power.add_argument('sort', type=int, dest='sort')
class RightRightsResource(Resource): class RightsApi(MethodView):
def get(self): def get(self):
"""获取选择父节点""" """获取选择父节点"""
@@ -202,9 +203,9 @@ class RightRightsResource(Resource):
return success_api(message="批量删除成功") return success_api(message="批量删除成功")
class RightPowerResource(Resource): class PowerApi(MethodView):
def post(self, power_id): def post(self):
res = parser_power.parse_args() res = parser_power.parse_args()
power = RightModel( power = RightModel(
icon=res.icon, icon=res.icon,
@@ -226,9 +227,9 @@ class RightPowerResource(Resource):
return success_api(message="成功") return success_api(message="成功")
def delete(self, power_id): def delete(self, _id):
# 删除权限(目前没有判断父节点自动删除子节点) # 删除权限(目前没有判断父节点自动删除子节点)
power = RightModel.query.filter_by(id=power_id).first() power = RightModel.query.filter_by(id=_id).first()
role_id_list = [] role_id_list = []
roles = power.role roles = power.role
for role in roles: for role in roles:
@@ -236,7 +237,7 @@ class RightPowerResource(Resource):
roles = RoleModel.query.filter(RoleModel.id.in_(role_id_list)).all() roles = RoleModel.query.filter(RoleModel.id.in_(role_id_list)).all()
for p in roles: for p in roles:
power.role.remove(p) power.role.remove(p)
r = RightModel.query.filter_by(id=power_id).delete() r = RightModel.query.filter_by(id=_id).delete()
db.session.commit() db.session.commit()
if r: if r:
@@ -244,7 +245,7 @@ class RightPowerResource(Resource):
else: else:
return fail_api(message="删除失败") return fail_api(message="删除失败")
def put(self, power_id): def put(self, _id):
res = parser_power.parse_args() res = parser_power.parse_args()
data = { data = {
@@ -257,7 +258,7 @@ class RightPowerResource(Resource):
"url": res.power_url, "url": res.power_url,
"sort": res.sort "sort": res.sort
} }
power = RightModel.query.filter_by(id=power_id).update(data) power = RightModel.query.filter_by(id=_id).update(data)
db.session.commit() db.session.commit()
if not power: if not power:
@@ -265,25 +266,21 @@ class RightPowerResource(Resource):
return success_api(message="更新权限成功") return success_api(message="更新权限成功")
class RightPowerEnableResource(Resource): def right_power_enable_resource(_id, action):
def put(self, right_id): power = RightModel.query.get(_id)
if power:
power = RightModel.query.get(right_id) power.enable = not power.enable
if power: db.session.commit()
power.enable = not power.enable message = "修改成功"
db.session.commit() return success_api(message=message)
message = "修改成功" else:
return success_api(message=message) return fail_api(message="出错啦")
else:
return fail_api(message="出错啦")
class AdminConfigsResource(Resource): def admin_configs_resource():
def get(self): return get_render_config()
return get_render_config()
class AdminMenuResource(Resource): def admin_menu_resource():
def get(self): menu_tree = make_menu_tree()
menu_tree = make_menu_tree() return jsonify(menu_tree)
return jsonify(menu_tree)
+57 -60
View File
@@ -1,4 +1,6 @@
from flask_restful import Resource, reqparse, marshal from flask.views import MethodView
from flask_restful import Resource, reqparse
from common.utils.http import table_api, success_api, fail_api from common.utils.http import table_api, success_api, fail_api
from extensions import db from extensions import db
@@ -33,49 +35,48 @@ def batch_remove_role(role_ids):
remove_role(role_id) remove_role(role_id)
class RoleRolesResource(Resource): def role_deletes():
# 表格数据 parser = reqparse.RequestParser()
def get(self): parser.add_argument('ids[]', action='append', dest='ids')
parser = reqparse.RequestParser(bundle_errors=True)
parser.add_argument('page', type=int, default=1)
parser.add_argument('limit', type=int, default=10)
parser.add_argument('roleName', type=str, dest='role_name', default="")
parser.add_argument('roleCode', type=str, dest='role_code', default="")
res = parser.parse_args() res = parser.parse_args()
filters = [] batch_remove_role(res.ids)
if res.role_name: return success_api(message="批量删除成功")
filters.append(RoleModel.name.like('%' + res.role_name + '%'))
if res.role_code:
filters.append(RoleModel.code.like('%' + res.role_code + '%'))
paginate = RoleModel.query.filter(*filters).paginate(page=res.page, per_page=res.limit, error_out=False)
return table_api(result={'items': [{'id': item.id,
'roleName': item.name,
'roleCode': item.code,
'enable': item.enable,
'comment': item.comment,
'details': item.details,
'sort': item.sort,
} for item in paginate.items],
'total': paginate.total}
, code=0)
def delete(self):
parser = reqparse.RequestParser()
parser.add_argument('ids[]', action='append', dest='ids')
res = parser.parse_args()
batch_remove_role(res.ids)
return success_api(message="批量删除成功")
class RoleRoleResource(Resource): class RoleRoleApi(MethodView):
def post(self, role_id): def get(self, _id):
if not _id:
parser = reqparse.RequestParser(bundle_errors=True)
parser.add_argument('page', type=int, default=1)
parser.add_argument('limit', type=int, default=10)
parser.add_argument('roleName', type=str, dest='role_name', default="")
parser.add_argument('roleCode', type=str, dest='role_code', default="")
res = parser.parse_args()
filters = []
if res.role_name:
filters.append(RoleModel.name.like('%' + res.role_name + '%'))
if res.role_code:
filters.append(RoleModel.code.like('%' + res.role_code + '%'))
paginate = RoleModel.query.filter(*filters).paginate(page=res.page, per_page=res.limit, error_out=False)
return table_api(result={'items': [{'id': item.id,
'roleName': item.name,
'roleCode': item.code,
'enable': item.enable,
'comment': item.comment,
'details': item.details,
'sort': item.sort,
} for item in paginate.items],
'total': paginate.total}
, code=0)
def post(self):
parser = reqparse.RequestParser() parser = reqparse.RequestParser()
parser.add_argument('details', type=str) parser.add_argument('details', type=str)
parser.add_argument('enable', type=int) parser.add_argument('enable', type=int)
@@ -97,7 +98,7 @@ class RoleRoleResource(Resource):
return success_api(message="成功") return success_api(message="成功")
# 更新角色 # 更新角色
def put(self, role_id): def put(self, _id):
parser = reqparse.RequestParser() parser = reqparse.RequestParser()
parser.add_argument('roleId', dest='role_id', type=int) parser.add_argument('roleId', dest='role_id', type=int)
parser.add_argument('roleCode', dest='role_code', type=str) parser.add_argument('roleCode', dest='role_code', type=str)
@@ -116,32 +117,30 @@ class RoleRoleResource(Resource):
"details": res.details "details": res.details
} }
role = RoleModel.query.filter_by(id=role_id).update(data) role = RoleModel.query.filter_by(id=_id).update(data)
db.session.commit() db.session.commit()
if not role: if not role:
return fail_api(message="更新角色失败") return fail_api(message="更新角色失败")
return success_api(message="更新角色成功") return success_api(message="更新角色成功")
class RoleEnableResource(Resource): def role_enable_resource(_id):
"""启用用户""" """启用用户"""
ret = RoleModel.query.get(_id)
ret.enable = not ret.enable
db.session.commit()
def put(self, role_id): message = "修改成功"
ret = RoleModel.query.get(role_id) if not ret:
ret.enable = not ret.enable return fail_api(message="出错啦")
db.session.commit() return success_api(message=message)
message = "修改成功"
if not ret:
return fail_api(message="出错啦")
return success_api(message=message)
class RolePowerResource(Resource): class RolePowerApi(MethodView):
def get(self, role_id): def get(self, _id):
# 获取角色权限 # 获取角色权限
role = RoleModel.query.filter_by(id=role_id).first() role = RoleModel.query.filter_by(id=_id).first()
# 获取权限列表的 id # 获取权限列表的 id
check_powers_list = [rp.id for rp in role.power] check_powers_list = [rp.id for rp in role.power]
powers = RightModel.query.all() # 获取所有的权限 powers = RightModel.query.all() # 获取所有的权限
@@ -167,7 +166,7 @@ class RolePowerResource(Resource):
} }
# 保存角色权限 # 保存角色权限
def put(self, role_id): def put(self, _id):
parser = reqparse.RequestParser() parser = reqparse.RequestParser()
parser.add_argument('powerIds', dest='power_ids') parser.add_argument('powerIds', dest='power_ids')
parser.add_argument('roleId', dest='role_id') parser.add_argument('roleId', dest='role_id')
@@ -176,7 +175,7 @@ class RolePowerResource(Resource):
power_list = res.power_ids.split(',') power_list = res.power_ids.split(',')
""" 更新角色权限 """ """ 更新角色权限 """
role = RoleModel.query.filter_by(id=role_id).first() role = RoleModel.query.filter_by(id=_id).first()
power_id_list = [] power_id_list = []
for p in role.power: for p in role.power:
power_id_list.append(p.id) power_id_list.append(p.id)
@@ -190,10 +189,8 @@ class RolePowerResource(Resource):
return success_api(message="授权成功") return success_api(message="授权成功")
# 角色删除 # 角色删除
def delete(self, role_id): def delete(self, _id):
print(role_id) res = remove_role(_id)
res = remove_role(role_id)
print(res)
if not res: if not res:
return fail_api(message="角色删除失败") return fail_api(message="角色删除失败")
return success_api(message="角色删除成功") return success_api(message="角色删除成功")
+4
View File
@@ -1,6 +1,10 @@
from flask import Blueprint from flask import Blueprint
from common import register_api
from .file import FilePhotoAPI from .file import FilePhotoAPI
from .passport import LoginAPI from .passport import LoginAPI
def register_sys_api(api_bp):
register_api(LoginAPI, 'login_api', '/passport/login', pk='_id', app=api_bp)
register_api(FilePhotoAPI, 'photo_api', '/file/photo', pk='photo_id', app=api_bp)
+1 -1
View File
@@ -110,7 +110,7 @@
treeDefaultClose: false, treeDefaultClose: false,
toolbar: '#toolbar', /*表格的工具栏*/ toolbar: '#toolbar', /*表格的工具栏*/
elem: '#tables', /*表格挂载的对象*/ elem: '#tables', /*表格挂载的对象*/
url: '/api/v1/dept/departments', /*数据来源接口*/ url: '/api/v1/dept/department', /*数据来源接口*/
page: false, page: false,
cols: get_columns(),/*表格渲染的数据*/ cols: get_columns(),/*表格渲染的数据*/
}) })
+2 -2
View File
@@ -85,7 +85,7 @@
table.render({ table.render({
parseData: parserTableData, parseData: parserTableData,
elem: '#tables', elem: '#tables',
url: '/api/v1/roles/roles', url: '/api/v1/roles/role',
page: true, page: true,
cols: get_columns(), cols: get_columns(),
skin: 'line', skin: 'line',
@@ -225,7 +225,7 @@
let loading = layer.load() let loading = layer.load()
$.ajax({ $.ajax({
url: '/api/v1/roles/roles', url: '/api/v1/roles/role',
data: { ids: ids }, data: { ids: ids },
dataType: 'json', dataType: 'json',
type: 'delete', type: 'delete',