def info(): """获取用户信息 --- tags: - 用户 responses: 200: description: 获取成功 schema: type: object properties: code: type: int data: type: array $ref: '#/definitions/Module' message: type: string examples: code: 0 data: [{}, {}] message: 'success' """ token = request.args.get('token') data = verify_token(token) if not data: return fail(401) user = Admin.query.get_or_404(data['user_id']) if not user: return fail(401) res = {'data': {'name': user.name, 'avatar': user.avatar}} return success(res)
def get_user(id): """获取单个用户 --- tags: - 用户 security: - api_key: [] responses: 200: description: 获取成功 schema: type: object properties: code: type: int data: type: array $ref: '#/definitions/Module' message: type: string examples: code: 0 data: [{}, {}] message: 'success' """ user = Admin.query.get_or_404(id) res = {'data': user.to_json()} return success(res)
def logout(): """登出 --- tags: - 登录 parameters: - in: body name: body required: true schema: $ref: '#/parameters/user_login' responses: 200: examples: code: 0 data: {'token': 'abcdefgh'} message: 'success' 401: examples: code: 1 message: 'fail' """ data = verify_token(request.headers['Authorization']) cache.delete(data['user_id']) return success()
def sysinfo(): """获取系统信息 --- tags: - 系统 security: - api_key: [] responses: 200: description: 获取成功 schema: type: object properties: code: type: int data: type: array $ref: '#/definitions/Module' message: type: string examples: code: 0 data: [{}, {}] message: 'success' """ res = { 'data': { 'cpu': get_cpu(), 'sys': get_sysinfo(), 'mem': get_memory(), 'disk': get_disk(), 'user': get_user() } } return success(res)
def delete_operation_log(): """删除操作日志,可批量删除 --- tags: - 系统 security: - api_key: [] responses: 200: description: 删除成功 schema: type: object properties: code: type: int message: type: string examples: code: 0 message: 'success' """ data = json.loads(request.data) try: for item in data: log = OperationLog.query.get_or_404(item['id']) db.session.delete(log) db.session.commit() return success() except Exception: return fail(400)
def create_user(): """创建用户 --- tags: - 用户 security: - api_key: [] responses: 200: description: 获取成功 schema: type: object properties: code: type: int data: type: array $ref: '#/definitions/Module' message: type: string examples: code: 0 data: [{}, {}] message: 'success' """ data = json.loads(request.data) Admin.create(**data) return success()
def edit_user(id): """编辑用户 --- tags: - 用户 security: - api_key: [] responses: 200: description: 获取成功 schema: type: object properties: code: type: int data: type: array $ref: '#/definitions/Module' message: type: string examples: code: 0 data: [{}, {}] message: 'success' """ data = json.loads(request.data) user = Admin.query.get_or_404(id) data['username'] = user.username if not data['password']: del data['password'] user.update(**data) return success()
def get_article(id): """获取单个资讯 --- tags: - 资讯 security: - api_key: [] responses: 200: description: 首页模块列表 schema: $ref: '#/definitions/ApiResponse' examples: code: 0 data: [{}, {}] message: 'success' """ article = Article.query.get_or_404(id) res = { 'data': article.to_json(fields=[ 'title', 'order', 'id', 'thumb_pic', 'content', 'module_name', 'module_id' ]) } return success(res)
def delete_user(id): """删除用户 --- tags: - 用户 security: - api_key: [] responses: 200: description: 获取成功 schema: type: object properties: code: type: int data: type: array $ref: '#/definitions/Module' message: type: string examples: code: 0 data: [{}, {}] message: 'success' """ user = Admin.query.get_or_404(id) if user: user.delete() return success() return fail(400)
def login(): """帐密登录 --- tags: - 登录 parameters: - in: body name: body required: true schema: $ref: '#/parameters/user_login' responses: 200: examples: code: 0 data: {'token': 'abcdefgh'} message: 'success' 401: examples: code: 1 message: 'fail' # 登录验证成功后生成一个token存在redis中,设置了有效期,并返回 # :return: Flask Response """ try: data = json.loads(request.data) except: return fail(401) user = Admin.query.filter_by(username=data['username']).first() if user and user.verify_password(data['password']): token = generate_token(user.id).decode() res = {'data': {'token': token}} cache.setex(user.id, current_app.config['EXPIRE_TIME'], token) return success(res) return fail(401)
def expression_offical_add() -> ApiResult: """ 添加体验官 --- tags: - 前台API parameters: - in: body name: body required: true schema: $ref: '#/parameters/add_expression_offical' responses: 200: description: 添加成功 examples: code: 0 message: 'success' """ data = request.form try: ExpressionOffical.create(**dict(data)) except: return fail() return success()
def users(): """获取用户列表 --- tags: - 用户 security: - api_key: [] responses: 200: description: 获取成功 schema: type: object properties: code: type: int data: type: array $ref: '#/definitions/Module' message: type: string examples: code: 0 data: [{}, {}] message: 'success' """ current_page = request.args.get('page') or 1 per_page = request.args.get('limit') or 10 pagination = Admin.query.paginate(int(current_page), per_page=int(per_page)) result = [item.to_json() for item in pagination.items] res = {'data': {'items': result, 'total': pagination.total}} return success(res)
def operation_logs(): """获取操作日志 --- tags: - 系统 security: - api_key: [] responses: 200: description: 获取成功 schema: type: object properties: code: type: int data: type: object message: type: string examples: code: 0 data: {'items': [{},{},{}], 'total': 200} message: 'success' """ current_page = request.args.get('page', 1) per_page = request.args.get('limit', 10) path = request.args.get('path', '') input = request.args.get('input', '') query_result = OperationLog.query.filter( OperationLog.path.like('%' + path + '%')).filter( OperationLog.input.like('%' + input + '%')).order_by( OperationLog.id.desc()) date = request.args.get('date') if date: zero, twenti_four = date + ' 00:00:00', date + ' 23:59:59' query_result = query_result.filter( OperationLog._created_at.between(zero, twenti_four)) pagination = query_result.paginate(int(current_page), per_page=int(per_page)) result = [item.to_json() for item in pagination.items] res = {'data': {'items': result, 'total': pagination.total}} return success(res)
def upload(): """上传文件 --- tags: - 资讯 security: - api_key: [] responses: 200: description: 获取成功 schema: type: object properties: code: type: int data: type: array $ref: '#/definitions/Module' message: type: string examples: code: 0 data: [{}, {}] message: 'success' """ file = request.files['file'] if file: now = time.time() date = time.strftime('%Y%m%d', time.localtime(now)) filename = str(int(now)) + file.filename if not allowed_file(filename): return fail(415) if not CH_REGEX.search(filename): filename = secure_filename(filename) UPLOAD_PATH = os.path.join(current_app.config['UPLOAD_FOLDER'], date) os.makedirs(UPLOAD_PATH, exist_ok=True) filepath = os.path.join(UPLOAD_PATH, filename) file.save(filepath) res = {'data': {'filename': filename, 'fileurl': filepath}} return success(res) return fail(400)
def github_login(): """github oauth登录 --- tags: - 登录 parameters: - in: url name: code required: true responses: 200: examples: code: 0 data: {'token': 'abcdefgh'} message: 'success' 401: examples: code: 1 message: 'fail' # 使用code和secret前往github获取到一个token,使用token能获取到用户信息,这里直接使用 # :return: Flask Response """ code = request.args.get('code') if not code: return fail(401) params = { 'code': code, 'client_id': GITHUB_CLIENTID, 'client_secret': GITHUB_CLIENTSECRET } res = requests.get(GITHUB_OAUTH_URL, params=params) # res.text: access_token=5fb2fde682eeae364bf72eed9e84cc1fa5ba9e1a&scope=user%3Aemail&token_type=bearer token = res.text.split('&')[0] res = requests.get(GITHUB_USER_URL + token) user = json.loads(res.content) user = Admin.query.filter_by(username=user['login']).first() if not user: return fail(401) token = generate_token(user.id).decode() res = {'data': {'token': token}} cache.setex(user.id, current_app.config['EXPIRE_TIME'], token) return success(res)
def delete_article(id): """删除资讯 --- tags: - 资讯 security: - api_key: [] responses: 200: description: 删除成功 examples: code: 0 data: [{}, {}] message: 'success' """ article = Article.query.get_or_404(id) if article: article.delete() return success() return fail(400)
def module(): """获取模块 --- tags: - 资讯 security: - api_key: [] responses: 200: description: 首页模块列表 schema: $ref: '#/definitions/ApiResponse' examples: code: 0 data: [{}, {}] message: 'success' """ modules = Module.get(num='all', child_num=0) res = {'data': modules} return success(res)
def search(word: str) -> ApiResult: """ 搜索接口 --- tags: - 前台API parameters: - $ref: '#/parameters/current_page' - $ref: '#/parameters/search_word' responses: 200: description: 搜索结果 schema: $ref: '#/definitions/Article' examples: code: 0 data: [{}, {}] message: 'success' meta: current_page: 1 total: 10 """ current_page = request.args.get('page') or 1 pagination = Article.query.filter( Article.title.like('%' + word + '%')).paginate(int(current_page), per_page=5) articles = pagination.items total = pagination.total result = [] for article in articles: item = article.to_json() result.append(item) res = { 'data': result, 'meta': { 'current_page': int(current_page), 'total': total } } return success(res)
def create_article(): """创建资讯 --- tags: - 资讯 security: - api_key: [] responses: 200: description: 首页模块列表 schema: $ref: '#/definitions/ApiResponse' examples: code: 0 data: [{}, {}] message: 'success' """ data = json.loads(request.data) data['module_id'] = None if not isinstance(data['module_id'], int) else data['module_id'] Article.create(**data) return success()
def upload_avatar(): """上传头像 --- tags: - 用户 security: - api_key: [] responses: 200: description: 获取成功 schema: type: object properties: code: type: int data: type: array $ref: '#/definitions/Module' message: type: string examples: code: 0 data: [{}, {}] message: 'success' """ file = request.files['avatar'] if file: now = time.time() filename = str(int(now)) + file.filename if not allowed_file(filename): return fail(415) if not CH_REGEX.search(filename): filename = secure_filename(filename) filepath = os.path.join(current_app.config['UPLOAD_FOLDER'], filename) file.save(filepath) res = {'data': {'filename': filename, 'fileurl': filepath}} return success(res) return fail(400)
def home() -> ApiResult: """获取首页 --- tags: - 前台API responses: 200: description: 首页模块列表 schema: $ref: '#/definitions/Module' examples: code: 0 data: [{}, {}] message: 'success' """ res = cache.get('home_json') if not res: modules = Module.get_item(10) result = [] for m in modules: if m.template_id == 'i_5': item = m.to_json() else: item = m.to_json(2) for c in item['child']: if c['thumb_pic']: c['thumb_pic'] = 'http://' + c['thumb_pic'] result.append(item) res = {'data': result} cache.setex('home_json', current_app.config['EXPIRE_TIME'], json.dumps(res)) else: res = json.loads(res) return success(res)
def articles(): """获取资讯列表 --- tags: - 资讯 security: - api_key: [] responses: 200: description: 获取成功 schema: type: object properties: code: type: int data: type: array $ref: '#/definitions/Module' message: type: string examples: code: 0 data: [{}, {}] message: 'success' """ current_page = request.args.get('page') or 1 per_page = request.args.get('limit') or 10 module = request.args.get('module') if module and not module == 'all': pagination = Article.query.filter_by(module_id=module).paginate( int(current_page), per_page=int(per_page)) else: pagination = Article.query.paginate(int(current_page), per_page=int(per_page)) result = [item.to_json() for item in pagination.items] res = {'data': {'items': result, 'total': pagination.total}} return success(res)