使用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
-88
View File
@@ -1,88 +0,0 @@
from applications.extensions import db
from applications.models import Dept, DeptSchema
from applications.models import User
from applications.common.curd import model_to_dicts
def get_dept_dict():
dept = Dept.query.order_by(Dept.sort).all()
res = model_to_dicts(Schema=DeptSchema, model=dept)
return res
def save_dept(req):
address = req.get("address")
deptName = req.get("deptName")
email = req.get("email")
leader = req.get("leader")
parentId = req.get("parentId")
phone = req.get("phone")
sort = req.get("sort")
status = req.get("status")
dept = Dept(
parent_id=parentId,
dept_name=deptName,
sort=sort,
leader=leader,
phone=phone,
email=email,
status=status,
address=address
)
r = db.session.add(dept)
db.session.commit()
return r
def get_dept_by_id(_id):
"""根据 id 获取部门"""
d = Dept.query.filter_by(id=_id).first()
return d
def enable_status(_id):
""" 启用权限 """
enable = 1
d = Dept.query.filter_by(id=_id).update({"status": enable})
if d:
db.session.commit()
return True
return False
def disable_status(_id):
""" 停用权限 """
enable = 0
d = Dept.query.filter_by(id=_id).update({"status": enable})
if d:
db.session.commit()
return True
return False
def update_dept(json):
""" 更新部门信息 """
_id = json.get("deptId"),
data = {
"dept_name": json.get("deptName"),
"sort": json.get("sort"),
"leader": json.get("leader"),
"phone": json.get("phone"),
"email": json.get("email"),
"status": json.get("status"),
"address": json.get("address")
}
d = Dept.query.filter_by(id=_id).update(data)
if not d:
return False
db.session.commit()
return True
def remove_dept(_id):
d = Dept.query.filter_by(id=_id).delete()
if not d:
return False
User.query.filter_by(dept_id=_id).update({"dept_id": None})
db.session.commit()
return True
-145
View File
@@ -1,145 +0,0 @@
from flask import escape
from applications.extensions import db
from applications.models import DictType, DictData, DictTypeSchema, DictDataSchema
from applications.common.curd import model_to_dicts
def get_dict(typecode: str):
dict_list = []
if DictType.query.filter_by(type_code=typecode, enable=1).first():
dicts = DictData.query.filter_by(type_code=typecode, enable=1).all()
for d in dicts:
dict_dict = {"key": d.data_label, "value": d.data_value}
dict_list.append(dict_dict)
else:
return None
return dict_list
def get_dict_type(page, limit, type_name):
dict_all = DictType.query
if type_name:
dict_all = dict_all.filter(DictType.type_name.like('%' + type_name + '%'))
dict_all = dict_all.paginate(page=page,
per_page=limit,
error_out=False)
count = DictType.query.count()
data = model_to_dicts(Schema=DictTypeSchema, model=dict_all.items)
return data, count
def get_dict_data(page, limit, type_code):
dict_all = DictData.query.filter_by(type_code=type_code).paginate(page=page,
per_page=limit,
error_out=False)
count = DictType.query.count()
dict_dict = model_to_dicts(Schema=DictDataSchema, model=dict_all.items)
return dict_dict, count
# 增加 dict type
def save_dict_type(req_json):
description = escape(req_json.get("description"))
enable = escape(req_json.get("enable"))
type_code = escape(req_json.get("typeCode"))
type_name = escape(req_json.get("typeName"))
d = DictType(type_name=type_name, type_code=type_code, enable=enable, description=description)
db.session.add(d)
db.session.commit()
return d.id
# 编辑字典类型
def update_dict_type(req_json):
id = escape(req_json.get("id"))
description = escape(req_json.get("description"))
enable = escape(req_json.get("enable"))
type_code = escape(req_json.get("typeCode"))
type_name = escape(req_json.get("typeName"))
DictType.query.filter_by(id=id).update({
"description": description,
"enable": enable,
"type_code": type_code,
"type_name": type_name
})
db.session.commit()
return
def enable_dict_type_status(id):
enable = 1
res = DictType.query.filter_by(id=id).update({"enable": enable})
if res:
db.session.commit()
return True
return False
def disable_dict_type_status(id):
enable = 0
res = DictType.query.filter_by(id=id).update({"enable": enable})
if res:
db.session.commit()
return True
return False
# 删除字典类型
def delete_type_by_id(id):
type_code = DictType.query.filter_by(id=id).first().type_code
DictData.query.filter_by(type_code=type_code).delete()
res = DictType.query.filter_by(id=id).delete()
db.session.commit()
return res
# 增加dictdata
def save_dict_data(req_json):
data_label = escape(req_json.get("dataLabel"))
data_value = escape(req_json.get("dataValue"))
enable = escape(req_json.get("enable"))
remark = escape(req_json.get("remark"))
type_code = escape(req_json.get("typeCode"))
d = DictData(data_label=data_label, data_value=data_value, enable=enable, remark=remark, type_code=type_code)
db.session.add(d)
db.session.commit()
return d.id
# 编辑字典数据
def update_dict_data(req_json):
id = req_json.get("dataId")
DictData.query.filter_by(id=id).update({
"data_label": escape(req_json.get("dataLabel")),
"data_value": escape(req_json.get("dataValue")),
"enable": escape(req_json.get("enable")),
"remark": escape(req_json.get("remark")),
"type_code": escape(req_json.get("typeCode"))
})
db.session.commit()
return
def enable_dict_data_status(id):
enable = 1
res = DictData.query.filter_by(id=id).update({"enable": enable})
if res:
db.session.commit()
return True
return False
def disable_dict_data_status(id):
enable = 0
res = DictData.query.filter_by(id=id).update({"enable": enable})
if res:
db.session.commit()
return True
return False
# 删除dictdata
def delete_data_by_id(id):
res = DictData.query.filter_by(id=id).delete()
db.session.commit()
return res
-36
View File
@@ -1,36 +0,0 @@
import os
from flask import current_app
from sqlalchemy import desc
from applications.common.utils.upload import photos
from applications.extensions import db
from applications.models import Photo, PhotoSchema
from applications.common.curd import model_to_dicts
def get_photo(page, limit):
photo = Photo.query.order_by(desc(Photo.create_time)).paginate(page=page, per_page=limit, error_out=False)
count = Photo.query.count()
data = model_to_dicts(Schema=PhotoSchema, model=photo.items)
return data, count
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
-111
View File
@@ -1,111 +0,0 @@
from applications.extensions import db
from applications.models.rights.power import Power, PowerSchema2
from applications.models import Role
from applications.common.curd import model_to_dicts
def get_power_dict():
power = Power.query.all()
res = model_to_dicts(Schema=PowerSchema2, model=power)
return res
# 选择父节点
def select_parent():
power = Power.query.all()
res = model_to_dicts(Schema=PowerSchema2, model=power)
res.append({"powerId": 0, "powerName": "顶级权限", "parentId": -1})
return res
# 增加权限
def save_power(req):
icon = req.get("icon")
openType = req.get("openType")
parentId = req.get("parentId")
powerCode = req.get("powerCode")
powerName = req.get("powerName")
powerType = req.get("powerType")
powerUrl = req.get("powerUrl")
sort = req.get("sort")
power = Power(
icon=icon,
open_type=openType,
parent_id=parentId,
code=powerCode,
name=powerName,
type=powerType,
url=powerUrl,
sort=sort,
enable=1
)
r = db.session.add(power)
db.session.commit()
return r
# 根据id查询权限
def get_power_by_id(id):
p = Power.query.filter_by(id=id).first()
return p
# 更新权限
def update_power(req_json):
id = req_json.get("powerId")
data = {
"icon": req_json.get("icon"),
"open_type": req_json.get("openType"),
"parent_id": req_json.get("parentId"),
"code": req_json.get("powerCode"),
"name": req_json.get("powerName"),
"type": req_json.get("powerType"),
"url": req_json.get("powerUrl"),
"sort": req_json.get("sort")
}
# print(data)
power = Power.query.filter_by(id=id).update(data)
db.session.commit()
# print(power)
return power
# 启动权限
def enable_status(id):
enable = 1
user = Power.query.filter_by(id=id).update({"enable": enable})
if user:
db.session.commit()
return True
return False
# 停用权限
def disable_status(id):
enable = 0
user = Power.query.filter_by(id=id).update({"enable": enable})
if user:
db.session.commit()
return True
return False
# 删除权限(目前没有判断父节点自动删除子节点)
def remove_power(id):
power = Power.query.filter_by(id=id).first()
role_id_list = []
roles = power.role
for role in roles:
role_id_list.append(role.id)
roles = Role.query.filter(Role.id.in_(role_id_list)).all()
for p in roles:
power.role.remove(p)
r = Power.query.filter_by(id=id).delete()
db.session.commit()
return r
# 批量删除权限
def batch_remove(ids):
for _id in ids:
remove_power(_id)
-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)
-161
View File
@@ -1,161 +0,0 @@
from flask import jsonify
from flask_login import current_user
from sqlalchemy import and_, desc
from applications.extensions import db
from applications.models import User, UserSchema
from applications.models import Role
from applications.models import AdminLog
# 获取用户的 sqlalchemy 对象分页器
from applications.common.curd import model_to_dicts
def get_user_data(page, limit, filters, deptId):
if deptId:
user = User.query.filter_by(dept_id=deptId).filter(
and_(*[getattr(User, k).like(v) for k, v in filters.items()])).paginate(page=page,
per_page=limit,
error_out=False)
else:
user = User.query.filter(and_(*[getattr(User, k).like(v) for k, v in filters.items()])).paginate(page=page,
per_page=limit,
error_out=False)
count = User.query.count()
return user, count
def get_user_data_dict(page, limit, filters, deptId):
""" 获取用户的dict数据分页器 """
user, count = get_user_data(page, limit, filters, deptId)
data = model_to_dicts(Schema=UserSchema, model=user.items)
return data, count
def get_user_by_name(username):
""" 通过名称获取用户 """
return User.query.filter_by(username=username).first()
def get_current_user_logs():
""" 获取当前用户日志 """
log = AdminLog.query.filter_by(url='/admin/login').filter_by(uid=current_user.id).order_by(
desc(AdminLog.create_time)).limit(10)
return log
def is_user_exists(username):
""" 判断用户是否存在 """
res = User.query.filter_by(username=username).count()
return bool(res)
def add_user(username, real_name, password):
""" 增加用户 """
user = User()
user.username = username
user.realname = real_name
user.set_password(password)
db.session.add(user)
db.session.commit()
return user.id
def add_user_role(_id, roles_list):
""" 增加用户角色 """
user = User.query.filter_by(id=_id).first()
roles = Role.query.filter(Role.id.in_(roles_list)).all()
for r in roles:
user.role.append(r)
db.session.commit()
def update_avatar(url):
""" 更新用户头像 """
r = User.query.filter_by(id=current_user.id).update({"avatar": url})
db.session.commit()
return r
def update_user(_id, username, realname, deptId):
""" 更新用户信息 """
user = User.query.filter_by(id=_id).update({'username': username, 'realname': realname, 'dept_id': deptId})
db.session.commit()
return user
def update_current_user_info(req_json):
""" 更新当前用户信息 """
r = User.query.filter_by(id=current_user.id).update(
{"realname": req_json.get("realName"), "remark": req_json.get("details")})
db.session.commit()
return r
def edit_password(res_json):
""" 修改当前用户密码 """
if res_json.get("newPassword") == '':
return jsonify(success=False, msg="新密码不得为空")
if res_json.get("newPassword") != res_json.get("confirmPassword"):
return jsonify(success=False, msg="俩次密码不一样")
user = current_user
is_right = user.validate_password(res_json.get("oldPassword"))
if not is_right:
return jsonify(success=False, msg="旧密码错误")
user.set_password(res_json.get("newPassword"))
db.session.add(user)
db.session.commit()
return jsonify(success=True, msg="更改成功")
def delete_by_id(_id):
""" 删除用户 """
user = User.query.filter_by(id=_id).first()
roles_id = []
for role in user.role:
roles_id.append(role.id)
roles = Role.query.filter(Role.id.in_(roles_id)).all()
for r in roles:
user.role.remove(r)
res = User.query.filter_by(id=_id).delete()
db.session.commit()
return res
def enable_status(_id):
""" 启用用户 """
enable = 1
user = User.query.filter_by(id=_id).update({"enable": enable})
if user:
db.session.commit()
return True
return False
def disable_status(_id):
""" 停用用户 """
enable = 0
user = User.query.filter_by(id=_id).update({"enable": enable})
if user:
db.session.commit()
return True
return False
def batch_remove(ids):
""" 批量删除 """
for _id in ids:
delete_by_id(_id)
def update_user_role(_id, roles_list):
user = User.query.filter_by(id=_id).first()
roles_id = []
for role in user.role:
roles_id.append(role.id)
roles = Role.query.filter(Role.id.in_(roles_id)).all()
for r in roles:
user.role.remove(r)
roles = Role.query.filter(Role.id.in_(roles_list)).all()
for r in roles:
user.role.append(r)
db.session.commit()
@@ -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,
}