使用flask-restful实现数据校验与序列化

This commit is contained in:
zhengxinonly
2021-06-26 03:17:29 +08:00
parent 8fba71c464
commit b8870d4c33
27 changed files with 273 additions and 533 deletions
View File
-145
View File
@@ -1,145 +0,0 @@
from sqlalchemy import and_
from applications.extensions import db
from applications.models import Role, RoleSchema
from applications.models.rights.power import Power, PowerSchema2
from applications.models import User
# 获取角色对象
from applications.common.curd import model_to_dicts
def get_role_data(page, limit, filters):
print(page, limit, filters)
role = Role.query.filter(and_(*[getattr(Role, k).like(v) for k, v in filters.items()])).paginate(page=page,
per_page=limit,
error_out=False)
count = Role.query.count()
return role, count
def get_role_data_dict(page, limit, filters):
""" 获取角色dict """
role, count = get_role_data(page, limit, filters)
data = model_to_dicts(Schema=RoleSchema, model=role.items)
return data, count
def add_role(req):
""" 增加角色 """
details = req.get("details")
enable = req.get("enable")
roleCode = req.get("roleCode")
roleName = req.get("roleName")
sort = req.get("sort")
role = Role(
details=details,
enable=enable,
code=roleCode,
name=roleName,
sort=sort
)
db.session.add(role)
db.session.commit()
def get_role_by_id(_id):
""" 通过id获取角色 """
r = Role.query.filter_by(id=_id).first()
return r
def update_role(req_json):
""" 更新角色 """
_id = req_json.get("roleId")
data = {
"code": req_json.get("roleCode"),
"name": req_json.get("roleName"),
"sort": req_json.get("sort"),
"enable": req_json.get("enable"),
"details": req_json.get("details")
}
role = Role.query.filter_by(id=_id).update(data)
db.session.commit()
return role
def get_role_power(_id):
""" 获取角色的权限 """
role = Role.query.filter_by(id=_id).first()
check_powers = role.power
check_powers_list = []
for cp in check_powers:
check_powers_list.append(cp.id)
powers = Power.query.all()
power_schema = PowerSchema2(many=True) # 用已继承ma.ModelSchema类的自定制类生成序列化类
output = power_schema.dump(powers) # 生成可序列化对象
for i in output:
if int(i.get("powerId")) in check_powers_list:
i["checkArr"] = "1"
else:
i["checkArr"] = "0"
return output
def update_role_power(_id, power_list):
""" 更新角色权限 """
role = Role.query.filter_by(id=_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()
def enable_status(_id):
""" 启用角色 """
enable = 1
role = Role.query.filter_by(id=_id).update({"enable": enable})
if role:
db.session.commit()
return True
return False
def disable_status(_id):
""" 停用角色 """
enable = 0
role = Role.query.filter_by(id=_id).update({"enable": enable})
if role:
db.session.commit()
return True
return False
def remove_role(_id):
""" 删除角色 """
role = Role.query.filter_by(id=_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=id).delete()
db.session.commit()
return r
def batch_remove(ids):
""" 批量删除 """
for _id in ids:
remove_role(_id)
@@ -0,0 +1,15 @@
from flask_restful import fields
power_fields = {
'powerId': fields.String(attribute="id"),
'powerName': fields.String(attribute="name"),
'powerType': fields.String(attribute="type"),
'powerUrl': fields.String(attribute="url"),
'openType': fields.String(attribute="open_type"),
'parentId': fields.String(attribute="parent_id"),
'icon': fields.String,
'sort': fields.Integer,
'create_time': fields.DateTime,
'update_time': fields.DateTime,
'enable': fields.Integer,
}
@@ -2,8 +2,6 @@ import json
from flask import Flask
from applications.extensions.init_databases.data import user_data
def add_data(fields, data_list, obj):
from applications.extensions import db
@@ -79,7 +77,7 @@ def create_admin_power():
_data_list = \
[
(1, '系统管理', '0', '', None, None, '0', 'layui-icon layui-icon-set-fill', 1, None, None, 1),
(3, '用户管理', '1', 'admin:user:main', '/admin/user/', '_iframe', '1',
(3, '用户管理', '1', 'admin:user:main', '/users/', '_iframe', '1',
'layui-icon layui-icon layui-icon layui-icon layui-icon-rate', 1, None, None, 1),
(4, '权限管理', '1', 'admin:power:main', '/rights/', '_iframe', '1', None, 2, None, None, 1),
(9, '角色管理', '1', 'admin:role:main', '/admin/role', '_iframe', '1', 'layui-icon layui-icon-username', 2,
@@ -88,11 +86,11 @@ def create_admin_power():
12, '系统监控', '1', 'admin:monitor:main', '/admin/monitor', '_iframe', '1',
'layui-icon layui-icon-vercode', 5,
'2021-03-18 22:05:19', '2021-03-25 19:15:27', 1),
(13, '日志管理', '1', 'admin:log:main', '/admin/log', '_iframe', '1', 'layui-icon layui-icon-read', 4,
(13, '日志管理', '1', 'admin:log:main', '/logs', '_iframe', '1', 'layui-icon layui-icon-read', 4,
'2021-03-18 22:37:10', '2021-06-03 11:06:25', 1),
(17, '文件管理', '0', '', '', '', '0', 'layui-icon layui-icon-camera', 2, '2021-03-19 18:56:23',
'2021-03-25 19:15:08', 1),
(18, '图片上传', '1', 'admin:file:main', '/admin/file', '_iframe', '17', 'layui-icon layui-icon-camera', 5,
(18, '图片上传', '1', 'admin:file:main', '/file', '_iframe', '17', 'layui-icon layui-icon-camera', 5,
'2021-03-19 18:57:19', '2021-03-25 19:15:13', 1),
(21, '权限增加', '2', 'admin:power:add', '', '', '4', 'layui-icon layui-icon-add-circle', 1,
'2021-03-22 19:43:52',
@@ -288,27 +286,6 @@ def create_example():
add_data(_fields, _data_list, DictData)
course_data = [
{'id': 1, 'name': '基础课'},
{'id': 2, 'name': '进阶课'},
{'id': 3, 'name': '爬虫课'},
{'id': 4, 'name': '数据分析课'},
{'id': 5, 'name': '全栈课程'},
{'id': 6, 'name': '自动化办公专题'},
{'id': 7, 'name': '反反爬专题'},
{'id': 8, 'name': 'JavaScript解密专题'},
{'id': 9, 'name': 'Scrapy框架专题'},
]
phase_data = [
{'name': '基础课'},
{'name': '高级开发'},
{'name': '爬虫'},
{'name': '数据分析'},
{'name': '全栈课程'}
]
def register_script(app: Flask):
@app.cli.command()
def init_db():
@@ -327,110 +304,3 @@ def register_script(app: Flask):
from applications.extensions import db
db.drop_all()
db.create_all()
@app.cli.command()
def init_vip_member():
from applications.models.vip import VipMember, Course, Phase
from applications.extensions import db
course_list = []
for data in course_data:
course = Course()
course.name = data.get('name')
db.session.add(course)
course_list.append(course_list)
for _phase in phase_data:
for i in range(1, 11):
print(_phase['name'], i)
phase = Phase()
phase.name = _phase['name']
phase.phase = i
db.session.add(phase)
db.session.commit()
base_course = Course.query.get(1)
adv_course = Course.query.get(2)
spider_course = Course.query.get(3)
ana_course = Course.query.get(4)
stack_course = Course.query.get(5)
for data in user_data:
user = VipMember()
user.id = int(data['id'])
user.create_at = data['date']
user.username = data['name']
user.wx = data['wx']
user.qq = data['qq']
user.account = data['account']
user.phase = int(data['phase'])
user.remark = data['remark']
print('rights', data['rights'])
rights = int(data['rights']) if data['rights'] else 0
user.courses.append(base_course)
if rights == 1:
user.courses.append(adv_course)
if rights == 3:
user.courses.append(spider_course)
if rights == 4:
user.courses.append(adv_course)
user.courses.append(base_course)
if rights == 5:
user.courses.append(ana_course)
if rights == 7:
user.courses.append(stack_course)
if rights == 8:
user.courses.append(spider_course)
user.courses.append(ana_course)
if rights == 9:
user.courses.append(adv_course)
user.courses.append(spider_course)
user.courses.append(ana_course)
if rights == 10:
user.courses.append(spider_course)
user.courses.append(stack_course)
if rights == 11:
user.courses.append(adv_course)
user.courses.append(spider_course)
user.courses.append(stack_course)
if rights == 16:
user.courses.append(adv_course)
user.courses.append(spider_course)
user.courses.append(ana_course)
user.courses.append(stack_course)
if data['base']:
base_list = data['base'].replace('', ',').split(',')
print(base_list)
for rou in base_list:
print('rou', rou)
x = Phase.query.filter(Phase.name == '基础课').filter(Phase.phase == int(rou)).first()
user.phases.append(x)
print(x)
if data['adv']:
adv_list = data['adv'].replace('', ',').split(',')
for rou in adv_list:
x = Phase.query.filter(Phase.name == '高级开发').filter(Phase.phase == int(rou)).first()
user.phases.append(x)
print(adv_list)
if data['spider']:
spider_list = data['spider'].replace('', ',').split(',')
for rou in spider_list:
x = Phase.query.filter(Phase.name == '爬虫').filter(Phase.phase == int(rou)).first()
user.phases.append(x)
print(spider_list)
if data['ana']:
ana_list = data['ana'].replace('', ',').split(',')
for rou in ana_list:
x = Phase.query.filter(Phase.name == '数据分析').filter(Phase.phase == int(rou)).first()
user.phases.append(x)
print(ana_list)
if data['stack']:
stack_list = data['stack'].replace('', ',').split(',')
for rou in stack_list:
x = Phase.query.filter(Phase.name == '全栈课程').filter(Phase.phase == int(rou)).first()
user.phases.append(x)
print(stack_list)
db.session.commit()
+1 -2
View File
@@ -2,8 +2,7 @@ from applications.models.company import Dept, DeptSchema, User, UserSchema
from .dict_models import DictType, DictData, DictTypeSchema, DictDataSchema
from .log import AdminLog, LogSchema
from applications.models.file.photo import Photo, PhotoSchema
from applications.models.rights.power import Power, PowerSchema, PowerSchema2
from applications.models.rights.power import Power, PowerSchema
from applications.models.rights.role import Role, RoleSchema
from applications.models.rights.role_power import role_power
from applications.models.rights.user_role import user_role
from applications.models.vip import VipMember, Course, Phase, course_phase, member_phase
-12
View File
@@ -37,15 +37,3 @@ class PowerSchema(ma.Schema):
enable = fields.Integer()
class PowerSchema2(ma.Schema): # 序列化类
powerId = fields.Str(attribute="id")
powerName = fields.Str(attribute="name")
powerType = fields.Str(attribute="type")
powerUrl = fields.Str(attribute="url")
openType = fields.Str(attribute="open_type")
parentId = fields.Str(attribute="parent_id")
icon = fields.Str()
sort = fields.Integer()
create_time = fields.DateTime()
update_time = fields.DateTime()
enable = fields.Integer()
-62
View File
@@ -1,62 +0,0 @@
from datetime import datetime
from applications.extensions import db
class VipMember(db.Model):
__tablename__ = 'vip_member'
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='VIP用户ID')
username = db.Column(db.String(20), comment='用户名')
mobile = db.Column(db.String(11), comment='电话号码')
id_card = db.Column(db.String(16), comment='身份证号码')
wx = db.Column(db.String(50), comment='微信号')
qq = db.Column(db.String(20), comment='QQ号')
account = db.Column(db.String(50), comment='报名账号')
number = db.Column(db.String(12), comment='学号')
phase = db.Column(db.SMALLINT, comment='第几期')
avatar = db.Column(db.String(255), comment='头像', default="/static/admin/admin/images/avatar.jpg")
remark = db.Column(db.String(255), comment='备注')
password_hash = db.Column(db.String(128), comment='哈希密码')
enable = db.Column(db.Integer, default=0, comment='启用')
create_at = db.Column(db.DateTime, default=datetime.now, comment='创建时间')
update_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
courses = db.relationship('Course', secondary="vip_member_course", backref=db.backref('members'), lazy='dynamic')
phases = db.relationship('Phase', secondary="vip_member_phase", backref=db.backref('members'), lazy='dynamic')
class Course(db.Model):
__tablename__ = 'vip_course'
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='课程id')
name = db.Column(db.String(20), comment='课程名')
class Phase(db.Model):
__tablename__ = 'vip_phase'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(20), comment='课程名')
phase = db.Column(db.Integer, comment='第几期')
teacher = db.Column(db.String(20), comment='带课讲师')
# 创建中间表
member_phase = db.Table(
"vip_member_phase", # 中间表名称
db.Column("id", db.Integer, primary_key=True, autoincrement=True, comment='标识'), # 主键
db.Column("member_id", db.Integer, db.ForeignKey("vip_member.id"), comment='用户编号'), # 属性 外键
db.Column("phase_id", db.Integer, db.ForeignKey("vip_phase.id"), comment='期数编号'), # 属性 外键
)
# 创建中间表
course_phase = db.Table(
"vip_member_course", # 中间表名称
db.Column("id", db.Integer, primary_key=True, autoincrement=True, comment='标识'), # 主键
db.Column("member_id", db.Integer, db.ForeignKey("vip_member.id"), comment='用户编号'), # 属性 外键
db.Column("course_id", db.Integer, db.ForeignKey("vip_course.id"), comment='期数编号'), # 属性 外键
)
+2 -2
View File
@@ -162,10 +162,10 @@
layer.close(index)
let loading = layer.load()
$.ajax({
url: 'delete',
url: 'upload',
data: { id: obj.data['id'] },
dataType: 'json',
type: 'POST',
type: 'delete',
success: function (res) {
layer.close(loading)
if (res.success) {
@@ -74,7 +74,7 @@
// 修改 avatar 字段
$.ajax({
method: 'put',
url: '/users/updateAvatar',
url: '/users/avatar',
data: JSON.stringify({ avatar: result.data }),
dataType: 'json',
contentType: 'application/json',
-2
View File
@@ -3,7 +3,6 @@ from applications.view.index import register_index_views
from applications.view.passport import register_passport_views
from applications.view.rights import register_rights_view
from applications.view.company.department import register_dept_views
from applications.view.vip import register_vip_view
def init_view(app):
@@ -12,4 +11,3 @@ def init_view(app):
register_rights_view(app)
register_passport_views(app)
register_dept_views(app)
register_vip_view(app)
+1 -1
View File
@@ -3,7 +3,7 @@ from flask import Blueprint, render_template, request, jsonify
from applications.common.utils.http import table_api, success_api, fail_api
from applications.common.utils.rights import authorize
from applications.models import DictType, DictData
from applications.common.admin import dict_curd
from applications.view.admin import dict_curd
admin_dict = Blueprint('adminDict', __name__, url_prefix='/admin/dict')
+32 -37
View File
@@ -1,13 +1,14 @@
import os
from flask import Blueprint, request, render_template, jsonify, current_app
from flask import Blueprint, request, render_template, jsonify, current_app, make_response
from flask_restful import Api, Resource
from applications.common.utils.http import fail_api, success_api, table_api
from applications.common.utils.rights import authorize
from applications.extensions import db
from applications.models import Photo
from applications.common.admin import file_curd
from applications.view.admin import file_curd
file_bp = Blueprint('file', __name__, url_prefix='/file')
file_api = Api(file_bp)
# 图片管理
@@ -27,42 +28,36 @@ def table():
return table_api(data=data, count=count)
# 上传
@file_bp.get('/upload')
@authorize("admin:file:add", log=True)
def upload():
return render_template('admin/file/photo_add.html')
@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 = file_curd.upload_one(photo=photo, mime=mime)
res = {
"msg": "上传成功",
"code": 0,
"success": True,
"data":
{"src": file_url}
}
return jsonify(res)
return fail_api()
# 上传接口
@file_bp.post('/upload')
@authorize("admin:file:add", log=True)
def upload_api():
if 'file' in request.files:
photo = request.files['file']
mime = request.files['file'].content_type
file_url = file_curd.upload_one(photo=photo, mime=mime)
res = {
"msg": "上传成功",
"code": 0,
"success": True,
"data":
{"src": file_url}
}
return jsonify(res)
return fail_api()
# 图片删除
@file_bp.route('/delete', methods=['GET', 'POST'])
@authorize("admin:file:delete", log=True)
def delete():
_id = request.form.get('id')
res = file_curd.delete_photo_by_id(_id)
if res:
return success_api(msg="删除成功")
else:
return fail_api(msg="删除失败")
@authorize("admin:file:delete", log=True)
def delete(self):
_id = request.form.get('id')
res = file_curd.delete_photo_by_id(_id)
if res:
return success_api(msg="删除成功")
else:
return fail_api(msg="删除失败")
# 图片批量删除
@@ -5,7 +5,7 @@ from applications.common.utils.http import success_api, fail_api
from applications.common.utils.rights import authorize
from applications.common.utils.validate import check_data
from applications.models import DeptSchema
from applications.common.admin import dept_curd as dept_curd
from applications.view.company.department import dept_curd as dept_curd
dept_bp = Blueprint('dept', __name__, url_prefix='/dept')
+1 -2
View File
@@ -1,7 +1,6 @@
from flask import Blueprint, request, render_template
from flask_restful import Api
from applications.common.admin import user_curd
from applications.common.utils.http import table_api
from applications.common.utils.rights import authorize
from applications.models import Role
@@ -36,5 +35,5 @@ def add():
return render_template('admin/user/add.html', roles=roles)
from . import profile
from . import profile, user_curd
from . import user_view
+16 -16
View File
@@ -1,10 +1,11 @@
# 个人中心
from flask import render_template, request, make_response
from flask_login import login_required, current_user
from flask_restful import Resource, reqparse
from applications.common.admin import user_curd
from flask_restful import Resource
from applications.common.utils.http import fail_api, success_api
from applications.view.company.users import users_bp, user_api
from applications.extensions import db
from applications.models import User
from applications.view.company.users import users_bp, user_api, user_curd
@users_bp.get('/center')
@@ -15,21 +16,20 @@ def center():
return render_template('admin/user/profile.html', user_info=user_info, user_logs=user_logs)
# 修改头像
@users_bp.get('/avatar')
@login_required
def profile():
return render_template('admin/user/avatar.html')
@user_api.resource('/avatar')
class Avatar(Resource):
"""修改头像"""
def get(self):
return make_response(render_template('admin/user/avatar.html'))
# 修改头像
@users_bp.put('/updateAvatar')
@login_required
def update_avatar():
url = request.json.get("avatar").get("src")
if not user_curd.update_avatar(url):
return fail_api(msg="出错啦")
return success_api(msg="修改成功")
def put(self):
url = request.json.get("avatar").get("src")
ret = User.query.filter_by(id=current_user.id).update({"avatar": url})
db.session.commit()
if not ret:
return fail_api(msg="出错啦")
return success_api(msg="修改成功")
# 修改当前用户信息
+1 -2
View File
@@ -2,11 +2,10 @@ from flask import render_template, request, make_response
from flask_restful import Resource
from applications.extensions import db
from applications.common.admin import user_curd
from applications.common.utils.http import fail_api, success_api
from applications.common.utils.rights import authorize
from applications.models import User, Role
from applications.view.company.users import user_api, users_bp
from applications.view.company.users import user_api, users_bp, user_curd
@user_api.resource('/')
@@ -1,19 +1,21 @@
from applications.extensions import db
from applications.models.rights.power import Power, PowerSchema2
from applications.models.rights.power import Power
from applications.models import Role
from applications.common.curd import model_to_dicts
from flask_restful import marshal
from applications.common.serialization import power_fields
def get_power_dict():
power = Power.query.all()
res = model_to_dicts(Schema=PowerSchema2, model=power)
res = marshal(power, power_fields)
return res
# 选择父节点
def select_parent():
power = Power.query.all()
res = model_to_dicts(Schema=PowerSchema2, model=power)
res = marshal(power, power_fields)
res.append({"powerId": 0, "powerName": "顶级权限", "parentId": -1})
return res
+116 -41
View File
@@ -1,10 +1,14 @@
from flask import Blueprint, render_template, request, jsonify
from flask_login import login_required
from applications.common.admin import role_curd
from applications.extensions import db
from applications.models import Role, Power
from applications.view.rights import role_curd
from applications.common.utils.http import table_api, success_api, fail_api
from applications.common.utils.rights import authorize
from flask_restful import reqparse, marshal
from applications.common.serialization import power_fields
role_bp = Blueprint('role', __name__, url_prefix='/admin/role')
@@ -19,17 +23,34 @@ def main():
@role_bp.get('/data')
@authorize("admin:role:main", log=True)
def table():
page = request.args.get('page', type=int)
limit = request.args.get('limit', type=int)
role_name = request.args.get('roleName', type=str)
role_code = request.args.get('roleCode', type=str)
filters = {}
if role_name:
filters["name"] = ('%' + role_name + '%')
if role_code:
filters["code"] = ('%' + role_code + '%')
data, count = role_curd.get_role_data_dict(page=page, limit=limit, filters=filters)
return table_api(data=data, count=count)
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)
# 角色增加
@@ -44,8 +65,24 @@ def add():
@role_bp.post('/save')
@authorize("admin:role:add", log=True)
def save():
req = request.json
role_curd.add_role(req=req)
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="成功")
@@ -60,7 +97,19 @@ def power(_id):
@role_bp.get('/getRolePower/<int:_id>')
@authorize("admin:role:main", log=True)
def get_role_power(_id):
powers = role_curd.get_role_power(_id)
role = Role.query.filter_by(id=_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": "默认"}
@@ -72,11 +121,14 @@ def get_role_power(_id):
@role_bp.put('/saveRolePower')
@authorize("admin:role:edit", log=True)
def save_role_power():
req_form = request.form
power_ids = req_form.get("powerIds")
power_list = power_ids.split(',')
role_id = req_form.get("roleId")
role_curd.update_role_power(_id=role_id, power_list=power_list)
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_curd.update_role_power(_id=res.role_id, power_list=power_list)
return success_api(msg="授权成功")
@@ -84,7 +136,7 @@ def save_role_power():
@role_bp.get('/edit/<int:_id>')
@authorize("admin:role:edit", log=True)
def edit(_id):
role = role_curd.get_role_by_id(_id)
role = Role.query.filter_by(id=_id).first()
return render_template('admin/role/edit.html', role=role)
@@ -92,8 +144,27 @@ def edit(_id):
@role_bp.put('/update')
@authorize("admin:role:edit", log=True)
def update():
res = role_curd.update_role(request.json)
if not res:
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=res.role_id).update(data)
db.session.commit()
if not role:
return fail_api(msg="更新角色失败")
return success_api(msg="更新角色成功")
@@ -102,27 +173,27 @@ def update():
@role_bp.put('/enable')
@authorize("admin:role:edit", log=True)
def enable():
id = request.json.get('roleId')
# print(id)
if id:
res = role_curd.enable_status(id)
if not res:
return fail_api(msg="出错啦")
return success_api(msg="启动成功")
return fail_api(msg="数据错误")
parser = reqparse.RequestParser()
parser.add_argument('roleId', dest='role_id', required=True, type=int)
res = parser.parse_args()
ret = Role.query.filter_by(id=res.role_id).update({"enable": 1})
db.session.commit()
if not ret:
return fail_api(msg="出错啦")
return success_api(msg="启动成功")
# 禁用用户
@role_bp.put('/disable')
@authorize("admin:role:edit", log=True)
def dis_enable():
_id = request.json.get('roleId')
if _id:
res = role_curd.disable_status(_id)
if not res:
return fail_api(msg="出错啦")
return success_api(msg="禁用成功")
return fail_api(msg="数据错误")
parser = reqparse.RequestParser()
parser.add_argument('roleId', dest='role_id', required=True, type=int)
res = parser.parse_args()
ret = role_curd.disable_status(res.role_id)
if not ret:
return fail_api(msg="出错啦")
return success_api(msg="禁用成功")
# 角色删除
@@ -140,6 +211,10 @@ def remove(_id):
@authorize("admin:role:remove", log=True)
@login_required
def batch_remove():
ids = request.form.getlist('ids[]')
role_curd.batch_remove(ids)
parser = reqparse.RequestParser()
parser.add_argument('ids[]', action='append', dest='ids')
res = parser.parse_args()
role_curd.batch_remove(res.ids)
return success_api(msg="批量删除成功")
+74
View File
@@ -0,0 +1,74 @@
from sqlalchemy import and_
from applications.extensions import db
from applications.models import Role, RoleSchema
from applications.models.rights.power import Power
from applications.models import User
# 获取角色对象
from applications.common.curd import model_to_dicts
def get_role_data(page, limit, filters):
print(page, limit, filters)
role = Role.query.filter(
and_(*[getattr(Role, k).like(v) for k, v in filters.items()])
).paginate(page=page, error_out=False)
count = Role.query.count()
return role, count
def get_role_data_dict(page, limit, filters):
""" 获取角色dict """
role, count = get_role_data(page, limit, filters)
data = model_to_dicts(Schema=RoleSchema, model=role.items)
return data, count
def get_role_by_id(_id):
""" 通过id获取角色 """
r = Role.query.filter_by(id=_id).first()
return r
def update_role_power(_id, power_list):
""" 更新角色权限 """
role = Role.query.filter_by(id=_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()
def remove_role(_id):
""" 删除角色 """
role = Role.query.filter_by(id=_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=id).delete()
db.session.commit()
return r
def batch_remove(ids):
""" 批量删除 """
for _id in ids:
remove_role(_id)
+3 -12
View File
@@ -1,8 +1,7 @@
from flask import render_template, request, jsonify, make_response
from flask_restful import Resource, reqparse
from flask_restful import Resource
from . import rights_bp, rights_api
from ...common.admin import rights_curd
from . import rights_bp, rights_api, rights_curd
from ...common.utils.http import success_api, fail_api
from ...common.utils.rights import authorize
@@ -98,7 +97,7 @@ def enable():
@authorize("admin:power:edit", log=True)
def dis_enable():
_id = request.json.get('powerId')
if id:
if _id:
res = rights_curd.disable_status(_id)
if not res:
return fail_api(msg="出错啦")
@@ -113,11 +112,3 @@ def batch_remove():
ids = request.form.getlist('ids[]')
rights_curd.batch_remove(ids)
return success_api(msg="批量删除成功")
"""
https://developer.aliyun.com/article/778501
四位权限值: 增删改查
八位部门值: 流量 接待&转化 讲师 运营 1111 1111
四位公司值:
"""
-58
View File
@@ -1,58 +0,0 @@
from flask import Blueprint, render_template, make_response, Flask, request
from flask_restful import Resource, Api, reqparse
from sqlalchemy import desc
from applications.common.utils.http import table_api
from applications.models import VipMember
vip_bp = Blueprint('vip', __name__, url_prefix='/vip')
vip_api = Api(vip_bp)
def register_vip_view(app: Flask):
app.register_blueprint(vip_bp)
@vip_api.resource('/member')
class Member(Resource):
def get(self):
return make_response(render_template('admin/vip/main.html'))
def post(self):
pass
# 用户分页查询
@vip_bp.get('/data')
def data():
parse = reqparse.RequestParser()
parse.add_argument('page', type=int, default=1)
parse.add_argument('limit', type=int, default=10)
parse.add_argument('wx', type=str, default="")
parse.add_argument('username', type=str, default="")
res = parse.parse_args()
filters = []
if res.username:
filters.append(VipMember.username.like('%{}%'.format(res.username)))
if res.wx:
filters.append(VipMember.wx.like('%{}%'.format(res.wx)))
paginate = VipMember.query.filter(*filters).paginate(
page=res.page, per_page=res.limit)
return table_api(data=[
{
'id': item.id,
'username': item.username,
'mobile': item.mobile,
'id_card': item.id_card,
'wx': item.wx,
'qq': item.qq,
'account': item.account,
'number': '{:0>2}{:0>4}'.format(item.phase, item.id),
'create_at': item.update_at,
'phase': item.phase,
} for item in paginate.items], count=paginate.total)