From 1663f94b0e629aa30549c7fd0373a4eec28b2669 Mon Sep 17 00:00:00 2001 From: RemiZOffAlex Date: Tue, 8 Jun 2021 14:29:17 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=81=D0=BE=D1=80=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D1=81=D1=82=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=B9=20=D0=B8=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- myapp/ns_api/page.py | 16 +++++++++--- myapp/ns_api/user.py | 60 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 72 insertions(+), 4 deletions(-) diff --git a/myapp/ns_api/page.py b/myapp/ns_api/page.py index 4d70709..ef7c19d 100644 --- a/myapp/ns_api/page.py +++ b/myapp/ns_api/page.py @@ -91,14 +91,24 @@ def page_update(id: int, title: str, text: str) -> dict: @jsonrpc.method('pages') -def pages_list(page: int) -> list: +def pages_list(page: int, order_by: dict = {'field': 'title', 'order': 'asc'}) -> list: """Список статей """ pages = models.db_session.query( models.Page - ).order_by( - models.Page.title.asc() ) + + # Сортировка + if order_by['field'] not in ['title', 'created', 'updated']: + raise ValueError + if order_by['order'] not in ['asc', 'desc']: + raise ValueError + field = getattr(models.Page, order_by['field']) + order = getattr(field, order_by['order']) + pages = pages.order_by( + order() + ) + pages = lib.getpage( pages, page, diff --git a/myapp/ns_api/user.py b/myapp/ns_api/user.py index 0506bcb..f65ecc1 100644 --- a/myapp/ns_api/user.py +++ b/myapp/ns_api/user.py @@ -6,6 +6,52 @@ from . import jsonrpc from .. import app, lib, models +@jsonrpc.method('user.add') +def user_add(username: str, password: str) -> dict: + """Новый пользователь + """ + if username is None or len(username) < 4 or len(username) > 25: + raise ValueError('Длина логина должна быть от 4 до 25 символов') + if password is None or len(password) < 4 or len(password) > 25: + raise ValueError('Длина пароля должна быть от 4 до 25 символов') + user = models.db_session.query( + models.User + ).filter( + models.User.name == username + ).first() + if user: + raise ValueError('Пользователь с таким логином уже существует') + + newuser = models.User( + username + ) + newuser.password = lib.get_hash_password( + password, + app.config['SECRET_KEY'] + ) + models.db_session.add(newuser) + models.db_session.commit() + + result = newuser.as_dict() + return result + + +@jsonrpc.method('user.enable') +def user_enable(id: int) -> dict: + """Разблокировать пользователя + """ + userRow = models.db_session.query( + models.User + ).filter( + models.User.id == id + ).first() + if userRow is None: + raise ValueError + userRow.disable = False + models.db_session.commit() + return userRow.as_dict() + + @jsonrpc.method('user.pages') def user_pages_list(id: int, page: int) -> list: """Список статей пользователя @@ -61,12 +107,24 @@ def user_pages_count(id: int) -> int: @jsonrpc.method('users') -def users_list(page: int) -> list: +def users_list(page: int, order_by: dict = {'field': 'name', 'order': 'asc'}) -> list: """Показать список пользователей """ users = models.db_session.query( models.User ) + + # Сортировка + if order_by['field'] not in ['name', 'created']: + raise ValueError + if order_by['order'] not in ['asc', 'desc']: + raise ValueError + field = getattr(models.User, order_by['field']) + order = getattr(field, order_by['order']) + users = users.order_by( + order() + ) + users = lib.getpage( users, page,