refactor(api):调整后端逻辑-上
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
from flask import Flask
|
||||
|
||||
from .department import dept_bp
|
||||
from .file import file_bp
|
||||
from .index import index_bp
|
||||
from .logs_view import logs_bp
|
||||
from .passport import passport_bp
|
||||
@@ -9,10 +7,11 @@ from .rights import rights_bp
|
||||
from .roles import role_bp
|
||||
from .users import users_bp
|
||||
|
||||
from . import department
|
||||
from . import file
|
||||
|
||||
|
||||
def init_view(app: Flask):
|
||||
app.register_blueprint(dept_bp)
|
||||
app.register_blueprint(file_bp)
|
||||
app.register_blueprint(index_bp)
|
||||
app.register_blueprint(logs_bp)
|
||||
app.register_blueprint(passport_bp)
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
from flask import render_template
|
||||
|
||||
from applications.common.utils.rights import authorize
|
||||
from applications.view import index_bp
|
||||
|
||||
|
||||
@index_bp.get('/dept')
|
||||
@authorize("admin:dept:main", log=True)
|
||||
def dept_index():
|
||||
return render_template('department/main.html')
|
||||
@@ -1,148 +0,0 @@
|
||||
from flask import Blueprint, render_template, jsonify, make_response
|
||||
from flask_restful import marshal, Api, Resource, reqparse
|
||||
|
||||
from applications.common.serialization import dept_fields
|
||||
from applications.common.utils.http import success_api, fail_api
|
||||
from applications.common.utils.rights import authorize
|
||||
from applications.extensions import db
|
||||
from applications.models import Dept, User
|
||||
|
||||
dept_bp = Blueprint('dept', __name__, url_prefix='/dept')
|
||||
dept_api = Api(dept_bp)
|
||||
|
||||
|
||||
@dept_bp.get('/')
|
||||
@authorize("admin:dept:main", log=True)
|
||||
def main():
|
||||
return render_template('department/main.html')
|
||||
|
||||
|
||||
@dept_bp.get('/data')
|
||||
@authorize("admin:dept:main", log=True)
|
||||
def data():
|
||||
dept_data = Dept.query.order_by(Dept.sort).all()
|
||||
|
||||
res = {
|
||||
"data": marshal(dept_data, dept_fields)
|
||||
}
|
||||
return jsonify(res)
|
||||
|
||||
|
||||
@dept_api.resource('/add')
|
||||
class AddDepartment(Resource):
|
||||
# @authorize("admin:dept:add", log=True)
|
||||
# def get(self):
|
||||
# return make_response(render_template('department/add.html'))
|
||||
|
||||
@authorize("admin:dept:add", log=True)
|
||||
def post(self):
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('address', type=str)
|
||||
parser.add_argument('deptName', type=str, dest='dept_name')
|
||||
parser.add_argument('email', type=str)
|
||||
parser.add_argument('leader', type=str)
|
||||
parser.add_argument('parentId', type=int, dest='parent_id')
|
||||
parser.add_argument('phone', type=str)
|
||||
parser.add_argument('sort', type=int)
|
||||
parser.add_argument('status', type=int)
|
||||
|
||||
res = parser.parse_args()
|
||||
|
||||
dept = Dept(
|
||||
parent_id=res.parent_id,
|
||||
dept_name=res.dept_name,
|
||||
sort=res.sort,
|
||||
leader=res.leader,
|
||||
phone=res.phone,
|
||||
email=res.email,
|
||||
status=res.status,
|
||||
address=res.address
|
||||
)
|
||||
db.session.add(dept)
|
||||
db.session.commit()
|
||||
|
||||
return success_api(msg="成功")
|
||||
|
||||
|
||||
@dept_bp.get('/tree')
|
||||
@authorize("admin:dept:main", log=True)
|
||||
def tree():
|
||||
dept_data = Dept.query.order_by(Dept.sort).all()
|
||||
res = {
|
||||
"status": {"code": 200, "message": "默认"},
|
||||
"data": marshal(dept_data, dept_fields)
|
||||
|
||||
}
|
||||
return jsonify(res)
|
||||
|
||||
|
||||
# 启用
|
||||
@dept_bp.put('/enable')
|
||||
@authorize("admin:dept:edit", log=True)
|
||||
def enable():
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('deptId', type=int, dest='dept_id', required=True)
|
||||
parser.add_argument('operate', type=int, choices=[0, 1], required=True)
|
||||
|
||||
res = parser.parse_args()
|
||||
d = Dept.query.filter_by(id=res.dept_id).update({"status": res.operate})
|
||||
if d:
|
||||
db.session.commit()
|
||||
message = '启用成功' if res.operate else '禁用成功'
|
||||
return success_api(msg=message)
|
||||
return fail_api(msg="出错啦")
|
||||
|
||||
|
||||
@dept_api.resource('/edit/<int:dept_id>')
|
||||
class DeptURD(Resource):
|
||||
@authorize("admin:dept:edit", log=True)
|
||||
def get(self, dept_id):
|
||||
dept = Dept.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 make_response(render_template('department/edit.html', dept=dept))
|
||||
return jsonify(success=True, msg='ok', dept=dept_data)
|
||||
|
||||
@authorize("admin:dept:edit", log=True)
|
||||
def put(self, dept_id):
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('address', type=str)
|
||||
parser.add_argument('deptName', type=str, dest='dept_name')
|
||||
parser.add_argument('email', type=str)
|
||||
parser.add_argument('leader', type=str)
|
||||
parser.add_argument('phone', type=str)
|
||||
parser.add_argument('sort', type=int)
|
||||
parser.add_argument('status', type=int)
|
||||
|
||||
res = parser.parse_args()
|
||||
data = {
|
||||
"dept_name": res.dept_name,
|
||||
"sort": res.sort,
|
||||
"leader": res.leader,
|
||||
"phone": res.phone,
|
||||
"email": res.email,
|
||||
"status": res.status,
|
||||
"address": res.address
|
||||
}
|
||||
res = Dept.query.filter_by(id=dept_id).update(data)
|
||||
if not res:
|
||||
return fail_api(msg="更新失败")
|
||||
db.session.commit()
|
||||
return success_api(msg="更新成功")
|
||||
|
||||
@authorize("admin:dept:remove", log=True)
|
||||
def delete(self, dept_id):
|
||||
ret = Dept.query.filter_by(id=dept_id).delete()
|
||||
User.query.filter_by(dept_id=dept_id).update({"dept_id": None})
|
||||
db.session.commit()
|
||||
if ret:
|
||||
return success_api(msg="删除成功")
|
||||
return fail_api(msg="删除失败")
|
||||
@@ -0,0 +1,11 @@
|
||||
from flask import render_template
|
||||
|
||||
from applications.view import index_bp
|
||||
from applications.common.utils.rights import authorize
|
||||
|
||||
|
||||
# 图片管理
|
||||
@index_bp.get('/file')
|
||||
@authorize("admin:file:main", log=True)
|
||||
def file_index():
|
||||
return render_template('file/photo.html')
|
||||
@@ -1,51 +0,0 @@
|
||||
import os
|
||||
|
||||
from flask import Blueprint, request, render_template, current_app
|
||||
from flask_restful import marshal
|
||||
from sqlalchemy import desc
|
||||
|
||||
from applications.common.serialization import photo_fields
|
||||
from applications.common.utils.http import table_api, success_api, fail_api
|
||||
from applications.common.utils.rights import authorize
|
||||
from applications.extensions import db
|
||||
from applications.models import Photo
|
||||
|
||||
file_bp = Blueprint('file', __name__, url_prefix='/file')
|
||||
|
||||
|
||||
# 图片管理
|
||||
@file_bp.get('/')
|
||||
@authorize("admin:file:main", log=True)
|
||||
def index():
|
||||
return render_template('file/photo.html')
|
||||
|
||||
|
||||
# 图片数据
|
||||
@file_bp.get('/table')
|
||||
@authorize("admin:file:main", log=True)
|
||||
def table():
|
||||
page = request.args.get('page', type=int)
|
||||
limit = request.args.get('limit', type=int)
|
||||
photo_paginate = Photo.query.order_by(desc(Photo.create_time)).paginate(page=page, per_page=limit, error_out=False)
|
||||
data = marshal(photo_paginate.items, photo_fields)
|
||||
return table_api(data=data, count=photo_paginate.total)
|
||||
|
||||
|
||||
# 图片批量删除
|
||||
@file_bp.route('/batchRemove', methods=['GET', 'POST'])
|
||||
@authorize("admin:file:delete", log=True)
|
||||
def batch_remove():
|
||||
ids = request.form.getlist('ids[]')
|
||||
photo_name = Photo.query.filter(Photo.id.in_(ids)).all()
|
||||
upload_url = current_app.config.get("UPLOADED_PHOTOS_DEST")
|
||||
for p in photo_name:
|
||||
os.remove(upload_url + '/' + p.name)
|
||||
photo = Photo.query.filter(Photo.id.in_(ids)).delete(synchronize_session=False)
|
||||
db.session.commit()
|
||||
if photo:
|
||||
return success_api(msg="删除成功")
|
||||
else:
|
||||
return fail_api(msg="删除失败")
|
||||
|
||||
|
||||
from . import file
|
||||
@@ -1,26 +0,0 @@
|
||||
import os
|
||||
from flask import current_app
|
||||
from applications.common.utils.upload import photos
|
||||
from applications.extensions import db
|
||||
from applications.models import Photo
|
||||
|
||||
|
||||
def upload_one(photo, mime):
|
||||
filename = photos.save(photo)
|
||||
file_url = photos.url(filename)
|
||||
|
||||
upload_url = current_app.config.get("UPLOADED_PHOTOS_DEST")
|
||||
size = os.path.getsize(upload_url + '/' + filename)
|
||||
photo = Photo(name=filename, href=file_url, mime=mime, size=size)
|
||||
db.session.add(photo)
|
||||
db.session.commit()
|
||||
return file_url
|
||||
|
||||
|
||||
def delete_photo_by_id(_id):
|
||||
photo_name = Photo.query.filter_by(id=_id).first().name
|
||||
photo = Photo.query.filter_by(id=_id).delete()
|
||||
db.session.commit()
|
||||
upload_url = current_app.config.get("UPLOADED_PHOTOS_DEST")
|
||||
os.remove(upload_url + '/' + photo_name)
|
||||
return photo
|
||||
@@ -1,44 +0,0 @@
|
||||
from flask import request, jsonify
|
||||
from flask_restful import Api, Resource
|
||||
|
||||
from applications.common.utils.http import fail_api, success_api
|
||||
from applications.common.utils.rights import authorize
|
||||
from applications.view.file import file_bp
|
||||
from applications.view.file._utils import upload_one, delete_photo_by_id
|
||||
|
||||
file_api = Api(file_bp)
|
||||
|
||||
|
||||
@file_api.resource('/upload')
|
||||
class Upload(Resource):
|
||||
# @authorize("admin:file:add", log=True)
|
||||
# def get(self):
|
||||
# return make_response(render_template('admin/file/photo_add.html'))
|
||||
|
||||
@authorize("admin:file:add", log=True)
|
||||
def post(self):
|
||||
if 'file' in request.files:
|
||||
photo = request.files['file']
|
||||
mime = request.files['file'].content_type
|
||||
file_url = upload_one(photo=photo, mime=mime)
|
||||
|
||||
res = {
|
||||
"msg": "上传成功",
|
||||
"code": 0,
|
||||
"success": True,
|
||||
"data":
|
||||
{"src": file_url}
|
||||
}
|
||||
return jsonify(res)
|
||||
return fail_api()
|
||||
|
||||
@authorize("admin:file:delete", log=True)
|
||||
def delete(self):
|
||||
_id = request.form.get('id')
|
||||
res = delete_photo_by_id(_id)
|
||||
if res:
|
||||
return success_api(msg="删除成功")
|
||||
else:
|
||||
return fail_api(msg="删除失败")
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ from flask import Blueprint, render_template
|
||||
|
||||
from applications.common.utils.rights import authorize
|
||||
|
||||
from applications.view.roles._utils import remove_role, batch_remove_role
|
||||
from applications.models import Role
|
||||
|
||||
role_bp = Blueprint('role', __name__, url_prefix='/admin/role')
|
||||
|
||||
@@ -21,4 +21,9 @@ def power(_id):
|
||||
return render_template('roles/power.html', id=_id)
|
||||
|
||||
|
||||
from . import role
|
||||
# 角色编辑
|
||||
@authorize("admin:role:edit", log=True)
|
||||
@role_bp.get('/edit/<int:role_id>')
|
||||
def role_editor(role_id):
|
||||
role = Role.query.filter_by(id=role_id).first()
|
||||
return render_template('roles/edit.html', role=role)
|
||||
@@ -1,30 +0,0 @@
|
||||
from applications.extensions import db
|
||||
from applications.models import Power, Role, User
|
||||
|
||||
|
||||
def remove_role(role_id):
|
||||
""" 删除角色 """
|
||||
role = Role.query.filter_by(id=role_id).first()
|
||||
# 删除该角色的权限
|
||||
power_id_list = []
|
||||
for p in role.power:
|
||||
power_id_list.append(p.id)
|
||||
|
||||
powers = Power.query.filter(Power.id.in_(power_id_list)).all()
|
||||
for p in powers:
|
||||
role.power.remove(p)
|
||||
user_id_list = []
|
||||
for u in role.user:
|
||||
user_id_list.append(u.id)
|
||||
users = User.query.filter(User.id.in_(user_id_list)).all()
|
||||
for u in users:
|
||||
role.user.remove(u)
|
||||
r = Role.query.filter_by(id=role_id).delete()
|
||||
db.session.commit()
|
||||
return r
|
||||
|
||||
|
||||
def batch_remove_role(role_ids):
|
||||
""" 批量删除 """
|
||||
for role_id in role_ids:
|
||||
remove_role(role_id)
|
||||
@@ -1,209 +0,0 @@
|
||||
from flask import jsonify
|
||||
from flask_login import login_required
|
||||
from flask_restful import Resource, Api, reqparse, marshal
|
||||
|
||||
from applications.extensions import db
|
||||
from applications.models import Role, Power
|
||||
from applications.common.utils.http import table_api, success_api, fail_api
|
||||
from applications.common.utils.rights import authorize
|
||||
from applications.common.serialization import power_fields
|
||||
|
||||
from . import role_bp
|
||||
from ._utils import remove_role, batch_remove_role
|
||||
|
||||
# TODO 分离视图操作
|
||||
from flask import render_template, make_response
|
||||
|
||||
role_api = Api(role_bp)
|
||||
|
||||
|
||||
# 表格数据
|
||||
@role_bp.get('/data')
|
||||
@authorize("admin:role:main", log=True)
|
||||
def table():
|
||||
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(Role.name.like('%' + res.role_name + '%'))
|
||||
if res.role_code:
|
||||
filters.append(Role.code.like('%' + res.role_code + '%'))
|
||||
|
||||
paginate = Role.query.filter(*filters).paginate(page=res.page, per_page=res.limit, error_out=False)
|
||||
|
||||
return table_api(data=[
|
||||
{
|
||||
'id': item.id,
|
||||
'roleName': item.name,
|
||||
'roleCode': item.code,
|
||||
'enable': item.enable,
|
||||
'remark': item.remark,
|
||||
'details': item.details,
|
||||
'sort': item.sort,
|
||||
'create_at': item.create_time,
|
||||
} for item in paginate.items
|
||||
], count=paginate.total)
|
||||
|
||||
|
||||
@role_api.resource('/add')
|
||||
class AddRole(Resource):
|
||||
# @authorize("admin:role:add", log=True)
|
||||
# def get(self):
|
||||
# return make_response(render_template('roles/add.html'))
|
||||
|
||||
@authorize("admin:role:add", log=True)
|
||||
def post(self):
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('details', type=str)
|
||||
parser.add_argument('enable', type=int)
|
||||
parser.add_argument('roleCode', type=str, dest='role_code')
|
||||
parser.add_argument('roleName', type=str, dest='role_name')
|
||||
parser.add_argument('sort', type=int)
|
||||
|
||||
res = parser.parse_args()
|
||||
|
||||
role = Role(
|
||||
details=res.details,
|
||||
enable=res.enable,
|
||||
code=res.role_code,
|
||||
name=res.role_name,
|
||||
sort=res.sort
|
||||
)
|
||||
db.session.add(role)
|
||||
db.session.commit()
|
||||
return success_api(msg="成功")
|
||||
|
||||
|
||||
@role_api.resource('/role_power/<int:role_id>')
|
||||
class RolePower(Resource):
|
||||
|
||||
@authorize("admin:role:main", log=True)
|
||||
def get(self, role_id):
|
||||
# 获取角色权限
|
||||
role = Role.query.filter_by(id=role_id).first()
|
||||
# 获取权限列表的 id
|
||||
check_powers_list = [rp.id for rp in role.power]
|
||||
powers = Power.query.all() # 获取所有的权限
|
||||
# power_schema = PowerSchema2(many=True) # 用已继承 ma.ModelSchema 类的自定制类生成序列化类
|
||||
# 将所有的权限生产可序列化对象 json
|
||||
# powers = power_schema.dump(powers) # 生成可序列化对象
|
||||
powers = marshal(powers, power_fields)
|
||||
for i in powers:
|
||||
if int(i.get("powerId")) in check_powers_list:
|
||||
i["checkArr"] = "1"
|
||||
else:
|
||||
i["checkArr"] = "0"
|
||||
res = {
|
||||
"data": powers,
|
||||
"status": {"code": 200, "message": "默认"}
|
||||
}
|
||||
return jsonify(res)
|
||||
|
||||
# 保存角色权限
|
||||
@authorize("admin:role:edit", log=True)
|
||||
def put(self, role_id):
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('powerIds', dest='power_ids')
|
||||
parser.add_argument('roleId', dest='role_id')
|
||||
|
||||
res = parser.parse_args()
|
||||
power_list = res.power_ids.split(',')
|
||||
|
||||
""" 更新角色权限 """
|
||||
role = Role.query.filter_by(id=role_id).first()
|
||||
power_id_list = []
|
||||
for p in role.power:
|
||||
power_id_list.append(p.id)
|
||||
powers = Power.query.filter(Power.id.in_(power_id_list)).all()
|
||||
for p in powers:
|
||||
role.power.remove(p)
|
||||
powers = Power.query.filter(Power.id.in_(power_list)).all()
|
||||
for p in powers:
|
||||
role.power.append(p)
|
||||
db.session.commit()
|
||||
return success_api(msg="授权成功")
|
||||
|
||||
# 角色删除
|
||||
@authorize("admin:role:remove", log=True)
|
||||
def delete(self, role_id):
|
||||
print(role_id)
|
||||
res = remove_role(role_id)
|
||||
print(res)
|
||||
if not res:
|
||||
return fail_api(msg="角色删除失败")
|
||||
return success_api(msg="角色删除成功")
|
||||
|
||||
|
||||
@role_api.resource('/edit/<int:role_id>')
|
||||
class EditRole(Resource):
|
||||
|
||||
# 角色编辑
|
||||
@authorize("admin:role:edit", log=True)
|
||||
def get(self, role_id):
|
||||
role = Role.query.filter_by(id=role_id).first()
|
||||
return make_response(render_template('roles/edit.html', role=role))
|
||||
|
||||
# 更新角色
|
||||
@authorize("admin:role:edit", log=True)
|
||||
def put(self, role_id):
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('roleId', dest='role_id', type=int)
|
||||
parser.add_argument('roleCode', dest='role_code', type=str)
|
||||
parser.add_argument('roleName', dest='role_name', type=str)
|
||||
parser.add_argument('sort', type=int)
|
||||
parser.add_argument('enable', type=int)
|
||||
parser.add_argument('details', type=str)
|
||||
|
||||
res = parser.parse_args()
|
||||
|
||||
data = {
|
||||
"code": res.role_code,
|
||||
"name": res.role_name,
|
||||
"sort": res.sort,
|
||||
"enable": res.enable,
|
||||
"details": res.details
|
||||
}
|
||||
|
||||
role = Role.query.filter_by(id=role_id).update(data)
|
||||
db.session.commit()
|
||||
if not role:
|
||||
return fail_api(msg="更新角色失败")
|
||||
return success_api(msg="更新角色成功")
|
||||
|
||||
|
||||
# 启用用户
|
||||
@role_bp.put('/enable')
|
||||
@authorize("admin:role:edit", log=True)
|
||||
def enable():
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('roleId', dest='role_id', required=True, type=int)
|
||||
parser.add_argument('operate', required=True, type=int)
|
||||
|
||||
res = parser.parse_args()
|
||||
ret = Role.query.filter_by(id=res.role_id).update({"enable": res.operate})
|
||||
db.session.commit()
|
||||
|
||||
message = "启动成功" if res.operate else "禁用成功"
|
||||
if not ret:
|
||||
return fail_api(msg="出错啦")
|
||||
return success_api(msg=message)
|
||||
|
||||
|
||||
# 批量删除
|
||||
@role_bp.delete('/batchRemove')
|
||||
@authorize("admin:role:remove", log=True)
|
||||
@login_required
|
||||
def batch_remove():
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('ids[]', action='append', dest='ids')
|
||||
|
||||
res = parser.parse_args()
|
||||
|
||||
batch_remove_role(res.ids)
|
||||
return success_api(msg="批量删除成功")
|
||||
Reference in New Issue
Block a user