1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
| from flask import Blueprint, request, jsonify from flask_apispec import use_kwargs, marshal_with from flask_jwt_extended import jwt_required, get_jwt_identity from marshmallow import fields, validate
from app.services.user_service import UserService from app.schemas.user import UserSchema, UserCreateSchema from app.utils.responses import success_response, error_response from app.utils.decorators import api_required
api_v1 = Blueprint('api_v1', __name__) docs = FlaskApiSpec()
@api_v1.route('/users', methods=['GET']) @jwt_required() @marshal_with(UserSchema(many=True), code=200) def user_list(): """ 获取用户列表 --- tags: - 用户管理 parameters: - name: page in: query type: integer default: 1 - name: per_page in: query type: integer default: 20 - name: search in: query type: string responses: 200: description: 用户列表 """ page = request.args.get('page', 1, type=int) per_page = request.args.get('per_page', 20, type=int) search = request.args.get('search', '') users = UserService.get_users( page=page, per_page=per_page, search=search ) return success_response( data=UserSchema(many=True).dump(users.items), meta={ 'page': page, 'per_page': per_page, 'total': users.total } )
@api_v1.route('/users/<int:user_id>', methods=['GET']) @jwt_required() @marshal_with(UserSchema, code=200) def user_detail(user_id: int): """ 获取用户详情 --- tags: - 用户管理 parameters: - name: user_id in: path type: integer required: true responses: 200: description: 用户详情 404: description: 用户不存在 """ user = UserService.get_user_by_id(user_id) if not user: return error_response('USER_NOT_FOUND', '用户不存在', 404) return success_response(data=UserSchema().dump(user))
@api_v1.route('/users', methods=['POST']) @jwt_required() @api_required(['admin']) @use_kwargs(UserCreateSchema, location='json') @marshal_with(UserSchema, code=201) def user_create(**kwargs): """ 创建用户 --- tags: - 用户管理 requestBody: required: true content: application/json: schema: UserCreateSchema responses: 201: description: 创建成功 400: description: 参数错误 """ user = UserService.create_user(**kwargs) return success_response( data=UserSchema().dump(user), message='用户创建成功', code=201 )
@api_v1.route('/users/<int:user_id>', methods=['PUT']) @jwt_required() @api_required(['admin']) @use_kwargs(UserCreateSchema(partial=True), location='json') @marshal_with(UserSchema, code=200) def user_update(user_id: int, **kwargs): """ 更新用户 --- tags: - 用户管理 """ user = UserService.update_user(user_id, **kwargs) if not user: return error_response('USER_NOT_FOUND', '用户不存在', 404) return success_response( data=UserSchema().dump(user), message='用户更新成功' )
@api_v1.route('/users/<int:user_id>', methods=['DELETE']) @jwt_required() @api_required(['admin']) def user_delete(user_id: int): """ 删除用户 --- tags: - 用户管理 """ success = UserService.delete_user(user_id) if not success: return error_response('USER_NOT_FOUND', '用户不存在', 404) return success_response(message='用户删除成功')
|