From eac4ab5563eafd3d36cd9a759f9081f56a5a2ae1 Mon Sep 17 00:00:00 2001 From: RemiZOffAlex Date: Mon, 17 Feb 2020 01:05:56 +0300 Subject: [PATCH] Update users --- myapp/ns_api/user.py | 65 +++++++++++- myapp/ns_page/templates/user/pages.html | 41 ++++++++ myapp/ns_user/templates/user.html | 7 ++ myapp/ns_user/templates/user_menu.html | 13 +++ myapp/ns_user/templates/user_pages.html | 132 ++++++++++++++++++++++++ myapp/ns_user/templates/users.html | 39 ++++++- myapp/ns_user/views.py | 32 ++++++ myapp/templates/inc/pages.html | 2 +- 8 files changed, 324 insertions(+), 7 deletions(-) create mode 100644 myapp/ns_user/templates/user_menu.html create mode 100644 myapp/ns_user/templates/user_pages.html diff --git a/myapp/ns_api/user.py b/myapp/ns_api/user.py index b14a8a6..1f62dad 100644 --- a/myapp/ns_api/user.py +++ b/myapp/ns_api/user.py @@ -5,16 +5,75 @@ __email__ = 'remizoffalex@mail.ru' __url__ = 'https://remizoffalex.ru' from . import jsonrpc, login_required -from .. import models +from .. import app, lib, models -@jsonrpc.method('users') -def users_list(): +@jsonrpc.method('user.pages(id=int, page=int)') +def user_pages_list(id, page): + """Список статей пользователя + """ + user = models.db_session.query( + models.User + ).filter( + models.User.id==id + ).first() + if user is None: + raise ValueError + pages = models.db_session.query( + models.Page + ).filter( + models.Page.user_id==id + ).order_by( + models.Page.title.asc() + ) + pages = lib.getpage( + pages, + page, + app.config['ITEMS_ON_PAGE'] + ).all() + + result = [] + for page in pages: + newRow = page.as_dict() + newRow['user'] = page.user.as_dict() + newRow['tags'] = [] + for tagLink in page.tags: + newRow['tags'].append(tagLink.tag.as_dict()) + result.append(newRow) + return result + + +@jsonrpc.method('user.pages.count(id=int)') +def user_pages_count(id): + """Общее количество статей + """ + user = models.db_session.query( + models.User + ).filter( + models.User.id==id + ).first() + if user is None: + raise ValueError + result = models.db_session.query( + models.Page + ).filter( + models.Page.user_id==id + ).count() + return result + + +@jsonrpc.method('users(page=int)') +def users_list(page): """ Показать список пользователей """ users = models.db_session.query( models.User + ) + users = lib.getpage( + users, + page, + app.config['ITEMS_ON_PAGE'] ).all() result = [] diff --git a/myapp/ns_page/templates/user/pages.html b/myapp/ns_page/templates/user/pages.html index d96d959..8aeeda7 100644 --- a/myapp/ns_page/templates/user/pages.html +++ b/myapp/ns_page/templates/user/pages.html @@ -5,11 +5,14 @@
+ Статьи
+{% include 'inc/filter.html' %} +
@@ -35,10 +38,38 @@ var app = new Vue({ el: '#app', data: { + filter: '', pages: [], pagination: {{ pagedata['pagination']|tojson|safe }}, + panels: { + filter: { + visible: false + } + }, }, methods: { + arrayRemove: function(arr, value) { + /* Удаление элемента из списка */ + return arr.filter(function(ele){ + return ele != value; + }); + }, + filterApply: function() {}, + filterClear: function() { + /* Очистить фильтр */ + let vm = this; + vm.filter = ''; + }, + filterPage: function(page) { + let vm = this; + if ( vm.filter.length<1 ) { + return true; + } + if ( page.title.toLowerCase().includes(vm.filter.toLowerCase()) ) { + return true; + } + return false; + }, getPages: function() { /* Получить список статей */ let vm = this; @@ -60,6 +91,10 @@ var app = new Vue({ } ); }, + showPanel: function(panel) { + /* Показать/скрыть панель */ + panel.visible = !panel.visible; + }, }, created: function() { let vm = this; @@ -93,6 +128,12 @@ var app = new Vue({ ); }, computed: { + filteredPages: function() { + /* Отфильтрованный список */ + let vm = this; + var result = vm.pages.filter(vm.filterPage); + return result; + }, firstAlpha: function() { /* Получить первый символ */ let vm = this; diff --git a/myapp/ns_user/templates/user.html b/myapp/ns_user/templates/user.html index 69dee4b..71bab6a 100644 --- a/myapp/ns_user/templates/user.html +++ b/myapp/ns_user/templates/user.html @@ -6,6 +6,12 @@ {{ user.name }}
+{% endraw %} + +{% include 'user_menu.html' %} +{% raw %} + +Зарегистрирован: {{ user.created }} {% endraw %} @@ -30,6 +36,7 @@ var app = new Vue({ el: '#app', data: { + menuitem: null, user: {{ pagedata['user']|tojson|safe }}, }, methods: { diff --git a/myapp/ns_user/templates/user_menu.html b/myapp/ns_user/templates/user_menu.html new file mode 100644 index 0000000..fd68e9e --- /dev/null +++ b/myapp/ns_user/templates/user_menu.html @@ -0,0 +1,13 @@ +
+
+ +
+ + + +
Статьи
+Статьи + +
+
+
diff --git a/myapp/ns_user/templates/user_pages.html b/myapp/ns_user/templates/user_pages.html new file mode 100644 index 0000000..60229da --- /dev/null +++ b/myapp/ns_user/templates/user_pages.html @@ -0,0 +1,132 @@ +{% extends "skeleton.html" %} +{% block content %} + +{% raw %} +

+ +{{ user.name }}

+
+{% endraw %} + +{% include 'user_menu.html' %} + + + +{% include 'inc/pages.html' %} + + + + + + +{% endblock %} + +{% block breadcrumb %} +{% raw %} + +{% endraw %} +{% endblock %} + +{% block script %} + + + + + +{% endblock %} diff --git a/myapp/ns_user/templates/users.html b/myapp/ns_user/templates/users.html index d70070f..ceff09f 100644 --- a/myapp/ns_user/templates/users.html +++ b/myapp/ns_user/templates/users.html @@ -5,6 +5,8 @@
{% raw %} + +
{{ user.name }} @@ -18,6 +20,8 @@
{% endraw %} + + {% endblock %} @@ -32,15 +36,17 @@ {% block script %} + diff --git a/myapp/ns_user/views.py b/myapp/ns_user/views.py index dda252e..f8a394f 100644 --- a/myapp/ns_user/views.py +++ b/myapp/ns_user/views.py @@ -27,6 +27,31 @@ def user_id(id): return body +@app.route('/user//pages') +def user_pages(id): + """Список статей пользователя + """ + pagedata = {} + user = models.db_session.query( + models.User + ).filter( + models.User.id==id + ).first() + if user is None: + abort(404) + pagedata['user'] = user.as_dict() + pagedata['title'] = '{} - {}'.format(user.name, app.config['TITLE']) + + pagedata['pagination'] = { + "page": 1, + "per_page": app.config['ITEMS_ON_PAGE'], + "size": 0 + } + + body = render_template('user_pages.html', pagedata=pagedata) + return body + + @app.route('/users') def users(): """ @@ -34,5 +59,12 @@ def users(): """ pagedata = {} pagedata['title'] = 'Список пользователей - ' + app.config['TITLE'] + + pagedata['pagination'] = { + "page": 1, + "per_page": app.config['ITEMS_ON_PAGE'], + "size": 0 + } + body = render_template('users.html', pagedata=pagedata) return body diff --git a/myapp/templates/inc/pages.html b/myapp/templates/inc/pages.html index 7fda49f..60d1b80 100644 --- a/myapp/templates/inc/pages.html +++ b/myapp/templates/inc/pages.html @@ -1,5 +1,5 @@ {% raw %} -