From da2654bf741fbf91011d7c06f2a236d5159c00da Mon Sep 17 00:00:00 2001 From: RemiZOffAlex Date: Sat, 2 Nov 2019 22:30:36 +0300 Subject: [PATCH] Update tags: add delete tag function --- myapp/ns_api/tag.py | 36 ++++++++++++++++++++++ myapp/ns_tag/templates/tags.html | 53 ++++++++++++++++++++++++++++++-- myapp/ns_tag/views.py | 10 ------ 3 files changed, 87 insertions(+), 12 deletions(-) diff --git a/myapp/ns_api/tag.py b/myapp/ns_api/tag.py index 8545713..efa142a 100644 --- a/myapp/ns_api/tag.py +++ b/myapp/ns_api/tag.py @@ -26,3 +26,39 @@ def tag_add(name): models.db_session.add(newTag) models.db_session.commit() return newTag.as_dict() + + +@jsonrpc.method('tag.delete(id=int)') +@login_required +def tag_delete(id): + """ + Удалить тег + """ + exist = models.db_session.query( + models.Tag + ).filter( + models.Tag.id==id + ).first() + if exist is None: + raise ValueError + + models.db_session.delete(exist) + models.db_session.commit() + return 'OK' + + +@jsonrpc.method('tags()') +@login_required +def tags_list(): + """ + Список тегов + """ + tags = models.db_session.query( + models.Tag + ).all() + + result = [] + for tag in tags: + newRow = tag.as_dict() + result.append(newRow) + return result diff --git a/myapp/ns_tag/templates/tags.html b/myapp/ns_tag/templates/tags.html index 973d489..98923eb 100644 --- a/myapp/ns_tag/templates/tags.html +++ b/myapp/ns_tag/templates/tags.html @@ -18,7 +18,10 @@
{% endraw %} @@ -42,11 +45,17 @@ var app = new Vue({ el: '#app', data: { - tags: {{ pagedata['tags']|tojson|safe }}, + tags: [], formNewTag: false, newTag: '' }, methods: { + arrayRemove: function(arr, value) { + /* Удаление элемента из списка */ + return arr.filter(function(element){ + return element != value; + }); + }, addTag: function() { /* Добавить тег */ var vm = this; @@ -73,7 +82,47 @@ var app = new Vue({ /* Показать/скрыть форму добавления нового тега */ var vm = this; vm.formNewTag = !vm.formNewTag; + }, + deleteTag: function(tag) { + /* Удалить тег */ + var vm = this; + axios.post( + '/api', + { + "jsonrpc": "2.0", + "method": 'tag.delete', + "params": { + "id": tag.id + }, + "id": 1 + } + ).then( + function(response) { + if ('result' in response.data) { + vm.tags = vm.arrayRemove(vm.tags, tag); + } + } + ); } + }, + created: function() { + /* Получить список тегов после загрузки страницы */ + var vm = this; + axios.post( + '/api', + { + "jsonrpc": "2.0", + "method": 'tags', + "params": {}, + "id": 1 + } + ).then( + function(response) { + if ('result' in response.data) { + vm.tags = response.data['result']; + } + } + ); } }) diff --git a/myapp/ns_tag/views.py b/myapp/ns_tag/views.py index 7d27851..b784198 100644 --- a/myapp/ns_tag/views.py +++ b/myapp/ns_tag/views.py @@ -16,16 +16,6 @@ def tags(): """ pagedata = {} pagedata['title'] = 'Список меток - ' + app.config['TITLE'] - tags = models.db_session.query( - models.Tag - ).order_by( - models.Tag.name.asc() - ).all() - - pagedata['tags'] = [] - for tag in tags: - pagedata['tags'].append(tag.as_dict()) - body = render_template('tags.html', pagedata=pagedata) return body