Files
pear-admin-flask/applications/service/admin/user.py
T
2021-03-22 20:42:02 +08:00

131 lines
3.3 KiB
Python

from flask import jsonify
from flask_login import current_user
from flask_marshmallow import Marshmallow
from marshmallow import fields
from sqlalchemy import and_
from sqlalchemy.sql import exists
from applications.models import db
from applications.models.admin import User, Role
from sqlalchemy.orm.dynamic import AppenderQuery
ma = Marshmallow()
# 用户models的序列化类
class UserSchema(ma.Schema):
id = fields.Integer()
username = fields.Str()
realname = fields.Str()
enable = fields.Bool()
create_at = fields.DateTime()
update_at = fields.DateTime()
'''
获取用户的sqlalchemy对象
分页器
'''
def get_user_data(page, limit, filters):
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
'''
获取用户的dict数据
分页器
'''
def get_user_data_dict(page, limit, filters):
user, count = get_user_data(page, limit, filters)
user_schema = UserSchema(many=True) # 用已继承ma.ModelSchema类的自定制类生成序列化类
output = user_schema.dump(user.items) # 生成可序列化对象
return output, count
'''
通过名称获取用户
'''
def get_user_by_name(username):
return User.query.filter_by(username=username).first()
# 判断用户是否存在
def is_user_exists(username):
res = User.query.filter_by(username=username).count()
return bool(res)
# 增加用户
def add_user(username, realName, password):
user = User(username=username, realname=realName)
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_user(id, username, realname):
user = User.query.filter_by(id=id).update({'username': username, 'realname': realname})
db.session.commit()
return user
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 update_status(status):
user = User.query.filter_by(id=id).update({'status': status})
if user:
db.session.commit()
return jsonify(msg="更新成功", code=200)
return jsonify(msg="出错啦", code=999)
# 批量删除
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()