From 0d25b479e5434515bda1ae390a0834b003db0cc4 Mon Sep 17 00:00:00 2001 From: zhengxinonly Date: Tue, 10 May 2022 23:43:33 +0800 Subject: [PATCH] =?UTF-8?q?wip:(=E9=87=8D=E6=9E=84=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=96=B9=E5=BC=8F3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- applications/users/__init__.py | 22 ++-- applications/users/profile.py | 85 +------------- applications/users/user.py | 160 ++++++++++++++++---------- templates/admin/file/photo.html | 4 +- templates/admin/users/users.html | 6 +- templates/admin/users/users_add.html | 2 +- templates/admin/users/users_edit.html | 2 +- 7 files changed, 117 insertions(+), 164 deletions(-) diff --git a/applications/users/__init__.py b/applications/users/__init__.py index 273d81e..43c63ac 100644 --- a/applications/users/__init__.py +++ b/applications/users/__init__.py @@ -1,16 +1,14 @@ -from flask_restful import Api - -from .profile import UserStatusResource, UserAvatarResource, UserInfoResource, UserPasswordResource -from .user import UserUsersResource, UserUserResource, UserRoleResource +from common import register_api +from .user import UserApi, user_role_resource, user_info def register_users_api(api_bp): - users_api = Api(api_bp, prefix='/users') + api_bp.add_url_rule('/users/user//', + view_func=user_info, + methods=['PUT']) - users_api.add_resource(UserInfoResource, '/user//info') - users_api.add_resource(UserStatusResource, '/user//status') - users_api.add_resource(UserAvatarResource, '/user//avatar') - users_api.add_resource(UserPasswordResource, '/user//password') - users_api.add_resource(UserUsersResource, '/users') - users_api.add_resource(UserUserResource, '/user/') - users_api.add_resource(UserRoleResource, '/user//role') + register_api(UserApi, 'users_api', '/users/user/', pk='_id', app=api_bp) + + api_bp.add_url_rule('/users/user//role', + view_func=user_role_resource, + methods=['PUT']) diff --git a/applications/users/profile.py b/applications/users/profile.py index c76abb9..419d68a 100644 --- a/applications/users/profile.py +++ b/applications/users/profile.py @@ -1,91 +1,10 @@ # 个人中心 from flask import request, jsonify -from flask_restful import Resource, reqparse +from flask.views import MethodView +from flask_restful import reqparse from common.utils.http import fail_api, success_api from extensions import db from models import UserModel -class UserStatusResource(Resource): - def put(self, user_id): - # 启用或者禁用用户 enable disable - - parser = reqparse.RequestParser() - parser.add_argument('userId', type=int, required=True, dest='user_id') - parser.add_argument('operate', type=int, required=True, dest='operate', choices=[0, 1]) - - res = parser.parse_args() - - if res.operate == 1: - user = UserModel.query.get(user_id) - user.enable = res.operate - message = success_api(message="启动成功") - else: - user = UserModel.query.filter_by(id=res.user_id).update({"enable": res.operate}) - message = success_api(message="禁用成功") - if user: - db.session.commit() - else: - return fail_api(message="出错啦") - return message - - -class UserAvatarResource(Resource): - """修改头像""" - - def put(self, user_id): - url = request.json.get("avatar").get("src") - ret = UserModel.query.get(user_id) - ret.avatar = url - db.session.commit() - if not ret: - return fail_api(message="出错啦") - return success_api(message="修改成功") - - -class UserInfoResource(Resource): - - def put(self, user_id): - parser = reqparse.RequestParser() - parser.add_argument('realName', type=str, dest='real_name') - parser.add_argument('username', type=str) - parser.add_argument('remark', type=str) - parser.add_argument('details', type=str) - - res = parser.parse_args() - - ret = UserModel.query.get(user_id) - ret.username = res.username - ret.realname = res.real_name - ret.remark = res.details - db.session.commit() - if not ret: - return fail_api(message="出错啦") - return success_api(message="更新成功") - - -class UserPasswordResource(Resource): - """前用户密码""" - - def put(self, user_id): - parser = reqparse.RequestParser() - parser.add_argument('oldPassword', type=str, required=True, help='旧密码不得为空') - parser.add_argument('newPassword', type=str, required=True, help='新密码不得为空') - parser.add_argument('confirmPassword', type=str, required=True, help='确认密码不能为空') - - res = parser.parse_args() - - if res.newPassword != res.confirmPassword: - return fail_api(message='确认密码不一致') - - """ 修改当前用户密码 """ - user = UserModel.query.get(user_id) - is_right = user.validate_password(res.oldPassword) - if not is_right: - return jsonify(success=False, message="旧密码错误") - user.set_password(res.newPassword) - db.session.add(user) - db.session.commit() - - return jsonify(success=True, message="更改成功") diff --git a/applications/users/user.py b/applications/users/user.py index 9972e43..427d86c 100644 --- a/applications/users/user.py +++ b/applications/users/user.py @@ -1,6 +1,7 @@ -from flask import request +from flask import request, jsonify +from flask.views import MethodView from flask_login import current_user -from flask_restful import Resource, reqparse +from flask_restful import reqparse from sqlalchemy import desc from common.utils.http import fail_api, success_api, table_api @@ -56,10 +57,17 @@ def update_user_role(_id, roles_list): db.session.commit() -class UserUsersResource(Resource): - """用户列表数据操作""" +def users_delete(): + """批量删除""" + ids = request.form.getlist('ids[]') + batch_remove(ids) + return success_api(message="批量删除成功") - def get(self): + +class UserApi(MethodView): + """修改用户数据""" + + def get(self, _id): parser = reqparse.RequestParser() parser.add_argument('page', type=int, default=1) parser.add_argument('limit', type=int, default=10) @@ -127,73 +135,101 @@ class UserUsersResource(Resource): return success_api(message="增加成功", code=0) - def delete(self): - """批量删除""" - ids = request.form.getlist('ids[]') - batch_remove(ids) - return success_api(message="批量删除成功") - - -class UserUserResource(Resource): - """修改用户数据""" - - def post(self, user_id): - """新建单个用户""" - parser = reqparse.RequestParser() - parser.add_argument("roleIds", type=str, dest='role_ids') - parser.add_argument("username", type=str, required=True, help="用户名不能为空") - parser.add_argument("realName", type=str, required=True, help="真实姓名不能为空", dest='real_name') - parser.add_argument("password", type=str, required=True, help="密码不得为空") - - res = parser.parse_args() - - role_ids = res.role_ids.split(',') - - if is_user_exists(res.username): - return fail_api(message="用户已经存在") - - user = UserModel() - user.username = res.username - user.realname = res.real_name - user.set_password(res.password) - db.session.add(user) - db.session.commit() - - """ 增加用户角色 """ - user = UserModel.query.filter_by(id=user.id).first() - roles = RoleModel.query.filter(RoleModel.id.in_(role_ids)).all() - for r in roles: - user.role.append(r) - db.session.commit() - - return success_api(message="增加成功", code=0) - - def delete(self, user_id): + def delete(self, _id): # 删除用户 - res = delete_by_id(user_id) + res = delete_by_id(_id) if not res: return fail_api(message="删除失败") return success_api(message="删除成功") -class UserRoleResource(Resource): - def put(self, user_id): +def user_role_resource(_id): + parser = reqparse.RequestParser() + parser.add_argument('roleIds', type=str, dest='role_ids') + parser.add_argument('userId', type=str, dest='user_id') + parser.add_argument('username', type=str) + parser.add_argument('realName', type=str, dest='real_name') + parser.add_argument('deptId', type=str, dest='dept_id') + + res = parser.parse_args() + role_ids = res.role_ids.split(',') + + # 更新用户数据 + UserModel.query.filter_by(id=_id).update({'username': res.username, + 'realname': res.real_name, + 'dept_id': res.dept_id}) + db.session.commit() + + update_user_role(_id, role_ids) + + return success_api(message="更新成功") + + +def user_info(_id, action): + if action == 'info': parser = reqparse.RequestParser() - parser.add_argument('roleIds', type=str, dest='role_ids') - parser.add_argument('userId', type=str, dest='user_id') - parser.add_argument('username', type=str) parser.add_argument('realName', type=str, dest='real_name') - parser.add_argument('deptId', type=str, dest='dept_id') + parser.add_argument('username', type=str) + parser.add_argument('remark', type=str) + parser.add_argument('details', type=str) res = parser.parse_args() - role_ids = res.role_ids.split(',') - # 更新用户数据 - UserModel.query.filter_by(id=user_id).update({'username': res.username, - 'realname': res.real_name, - 'dept_id': res.dept_id}) + ret = UserModel.query.get(_id) + ret.username = res.username + ret.realname = res.real_name + ret.remark = res.details + db.session.commit() + if not ret: + return fail_api(message="出错啦") + return success_api(message="更新成功") + elif action == 'status': + parser = reqparse.RequestParser() + parser.add_argument('userId', type=int, required=True, dest='user_id') + parser.add_argument('operate', type=int, required=True, dest='operate', choices=[0, 1]) + + res = parser.parse_args() + + if res.operate == 1: + user = UserModel.query.get(_id) + user.enable = res.operate + message = success_api(message="启动成功") + else: + user = UserModel.query.filter_by(id=res.user_id).update({"enable": res.operate}) + message = success_api(message="禁用成功") + if user: + db.session.commit() + else: + return fail_api(message="出错啦") + return message + elif action == 'avatar': + url = request.json.get("avatar").get("src") + ret = UserModel.query.get(_id) + ret.avatar = url + db.session.commit() + if not ret: + return fail_api(message="出错啦") + return success_api(message="修改成功") + elif action == 'password': + parser = reqparse.RequestParser() + parser.add_argument('oldPassword', type=str, required=True, help='旧密码不得为空') + parser.add_argument('newPassword', type=str, required=True, help='新密码不得为空') + parser.add_argument('confirmPassword', type=str, required=True, help='确认密码不能为空') + + res = parser.parse_args() + + if res.newPassword != res.confirmPassword: + return fail_api(message='确认密码不一致') + + """ 修改当前用户密码 """ + user = UserModel.query.get(_id) + is_right = user.validate_password(res.oldPassword) + if not is_right: + return jsonify(success=False, message="旧密码错误") + user.set_password(res.newPassword) + db.session.add(user) db.session.commit() - update_user_role(user_id, role_ids) - - return success_api(message="更新成功") + return jsonify(success=True, message="更改成功") + else: + return jsonify(success=False, message="操作有误") diff --git a/templates/admin/file/photo.html b/templates/admin/file/photo.html index 97be878..6caedaa 100644 --- a/templates/admin/file/photo.html +++ b/templates/admin/file/photo.html @@ -95,9 +95,9 @@ ] table.render({ - parseData: parserTableData, /* 服务器返回的数据格式与layui 不一致,需要进行转化*/ + parseData: parserTableData, /* 服务器返回的数据格式与 layui 不一致,需要进行转化*/ elem: '#tables', - url: '/api/v1/file/photos', + url: '/api/v1/file/photo', page: true, cols: get_columns(), skin: 'line', diff --git a/templates/admin/users/users.html b/templates/admin/users/users.html index e4846e1..e98be8a 100644 --- a/templates/admin/users/users.html +++ b/templates/admin/users/users.html @@ -120,7 +120,7 @@ table.render({ parseData: parserTableData, elem: '#tables', - url: '/api/v1/users/users', + url: '/api/v1/users/user', page: true, cols: get_columns(), skin: 'line', @@ -134,7 +134,7 @@ dtree.render({ elem: '#dept-tree', method: 'get', - url: '/api/v1/dept/departments', + url: '/api/v1/dept/department', dataFormat: 'list', line: true, skin: 'laySimple', @@ -256,7 +256,7 @@ let loading = layer.load() $.ajax({ - url: '/api/v1/users/users', + url: '/api/v1/users/user', data: { ids: ids }, dataType: 'json', type: 'delete', diff --git a/templates/admin/users/users_add.html b/templates/admin/users/users_add.html index 2fa60ec..c01e1bf 100644 --- a/templates/admin/users/users_add.html +++ b/templates/admin/users/users_add.html @@ -76,7 +76,7 @@ data.field.roleIds = roleIds $.ajax({ - url: '/api/v1/users/users', + url: '/api/v1/users/user', data: JSON.stringify(data.field), dataType: 'json', contentType: 'application/json', diff --git a/templates/admin/users/users_edit.html b/templates/admin/users/users_edit.html index 9175ff0..43b904d 100644 --- a/templates/admin/users/users_edit.html +++ b/templates/admin/users/users_edit.html @@ -79,7 +79,7 @@ dtree.renderSelect({ elem: '#selectParent', - url: '/api/v1/dept/departments', + url: '/api/v1/dept/department', method: 'get', selectInputName: { nodeId: 'deptId', context: 'deptName' }, skin: 'layui',