xuxiaofei.666
5 years ago
commit
c21f2fd603
18 changed files with 583 additions and 0 deletions
@ -0,0 +1,3 @@ |
|||||
|
|
||||
|
py_vislib/settings/prod.py |
||||
|
*.pyc |
@ -0,0 +1,4 @@ |
|||||
|
# py_vislib |
||||
|
Back end of [vue-data-board](https://github.com/dongsuo/vue-data-board). |
||||
|
|
||||
|
## [Document](https://docs.vislib.best) |
@ -0,0 +1,21 @@ |
|||||
|
#!/usr/bin/env python |
||||
|
"""Django's command-line utility for administrative tasks.""" |
||||
|
import os |
||||
|
import sys |
||||
|
|
||||
|
|
||||
|
def main(): |
||||
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'py_vislib.settings') |
||||
|
try: |
||||
|
from django.core.management import execute_from_command_line |
||||
|
except ImportError as exc: |
||||
|
raise ImportError( |
||||
|
"Couldn't import Django. Are you sure it's installed and " |
||||
|
"available on your PYTHONPATH environment variable? Did you " |
||||
|
"forget to activate a virtual environment?" |
||||
|
) from exc |
||||
|
execute_from_command_line(sys.argv) |
||||
|
|
||||
|
|
||||
|
if __name__ == '__main__': |
||||
|
main() |
@ -0,0 +1,16 @@ |
|||||
|
""" |
||||
|
ASGI config for py_vislib project. |
||||
|
|
||||
|
It exposes the ASGI callable as a module-level variable named ``application``. |
||||
|
|
||||
|
For more information on this file, see |
||||
|
https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/ |
||||
|
""" |
||||
|
|
||||
|
import os |
||||
|
|
||||
|
from django.core.asgi import get_asgi_application |
||||
|
|
||||
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'py_vislib.settings') |
||||
|
|
||||
|
application = get_asgi_application() |
@ -0,0 +1,118 @@ |
|||||
|
""" |
||||
|
Django settings for py_vislib project. |
||||
|
|
||||
|
Generated by 'django-admin startproject' using Django 3.0.4. |
||||
|
|
||||
|
For more information on this file, see |
||||
|
https://docs.djangoproject.com/en/3.0/topics/settings/ |
||||
|
|
||||
|
For the full list of settings and their values, see |
||||
|
https://docs.djangoproject.com/en/3.0/ref/settings/ |
||||
|
""" |
||||
|
|
||||
|
import os |
||||
|
|
||||
|
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) |
||||
|
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
||||
|
|
||||
|
|
||||
|
# Quick-start development settings - unsuitable for production |
||||
|
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/ |
||||
|
|
||||
|
# SECURITY WARNING: keep the secret key used in production secret! |
||||
|
SECRET_KEY = 'i6ma-ro$tv1jk=we!liu0(^^mubm$svys0ro+2@$n-8&(*5nj#' |
||||
|
|
||||
|
# SECURITY WARNING: don't run with debug turned on in production! |
||||
|
DEBUG = False |
||||
|
|
||||
|
ALLOWED_HOSTS = ['*'] |
||||
|
|
||||
|
# 跨域 |
||||
|
# CORS_ORIGIN_ALLOW_ALL = True |
||||
|
# SESSION_COOKIE_SAMESITE = None |
||||
|
# SESSION_COOKIE_SECURE = True |
||||
|
# Application definition |
||||
|
|
||||
|
INSTALLED_APPS = [ |
||||
|
'vislib.apps.VislibConfig', |
||||
|
'corsheaders', |
||||
|
'django.contrib.admin', |
||||
|
'django.contrib.auth', |
||||
|
'django.contrib.contenttypes', |
||||
|
'django.contrib.sessions', |
||||
|
'django.contrib.messages', |
||||
|
'django.contrib.staticfiles', |
||||
|
] |
||||
|
|
||||
|
MIDDLEWARE = [ |
||||
|
'vislib.middleware.SameSiteMiddleware', # position it at the top |
||||
|
'corsheaders.middleware.CorsMiddleware', |
||||
|
'django.middleware.security.SecurityMiddleware', |
||||
|
'django.contrib.sessions.middleware.SessionMiddleware', |
||||
|
'django.middleware.common.CommonMiddleware', |
||||
|
'django.middleware.csrf.CsrfViewMiddleware', |
||||
|
'django.contrib.auth.middleware.AuthenticationMiddleware', |
||||
|
'django.contrib.messages.middleware.MessageMiddleware', |
||||
|
'django.middleware.clickjacking.XFrameOptionsMiddleware', |
||||
|
] |
||||
|
|
||||
|
ROOT_URLCONF = 'py_vislib.urls' |
||||
|
|
||||
|
TEMPLATES = [ |
||||
|
{ |
||||
|
'BACKEND': 'django.template.backends.django.DjangoTemplates', |
||||
|
'DIRS': [], |
||||
|
'APP_DIRS': True, |
||||
|
'OPTIONS': { |
||||
|
'context_processors': [ |
||||
|
'django.template.context_processors.debug', |
||||
|
'django.template.context_processors.request', |
||||
|
'django.contrib.auth.context_processors.auth', |
||||
|
'django.contrib.messages.context_processors.messages', |
||||
|
], |
||||
|
}, |
||||
|
}, |
||||
|
] |
||||
|
|
||||
|
WSGI_APPLICATION = 'py_vislib.wsgi.application' |
||||
|
|
||||
|
# Database |
||||
|
# ./local.py or ./prod.py |
||||
|
|
||||
|
# Password validation |
||||
|
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators |
||||
|
|
||||
|
AUTH_PASSWORD_VALIDATORS = [ |
||||
|
{ |
||||
|
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', |
||||
|
}, |
||||
|
{ |
||||
|
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', |
||||
|
}, |
||||
|
{ |
||||
|
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', |
||||
|
}, |
||||
|
{ |
||||
|
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', |
||||
|
}, |
||||
|
] |
||||
|
|
||||
|
|
||||
|
# Internationalization |
||||
|
# https://docs.djangoproject.com/en/3.0/topics/i18n/ |
||||
|
|
||||
|
LANGUAGE_CODE = 'en-us' |
||||
|
|
||||
|
TIME_ZONE = 'Asia/Shanghai' |
||||
|
|
||||
|
USE_I18N = True |
||||
|
|
||||
|
USE_L10N = True |
||||
|
|
||||
|
USE_TZ = True |
||||
|
|
||||
|
|
||||
|
# Static files (CSS, JavaScript, Images) |
||||
|
# https://docs.djangoproject.com/en/3.0/howto/static-files/ |
||||
|
|
||||
|
STATIC_URL = '/static/' |
@ -0,0 +1,15 @@ |
|||||
|
from .base import * |
||||
|
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases |
||||
|
|
||||
|
DEBUG = True |
||||
|
|
||||
|
DATABASES = { |
||||
|
'default': { |
||||
|
'ENGINE': 'django.db.backends.mysql', |
||||
|
'NAME': 'vislib', |
||||
|
'USER': 'root', |
||||
|
'PASSWORD': '123456xxf', |
||||
|
'HOST': 'localhost', |
||||
|
'PORT': '3306', |
||||
|
} |
||||
|
} |
@ -0,0 +1,22 @@ |
|||||
|
"""py_vislib URL Configuration |
||||
|
|
||||
|
The `urlpatterns` list routes URLs to views. For more information please see: |
||||
|
https://docs.djangoproject.com/en/3.0/topics/http/urls/ |
||||
|
Examples: |
||||
|
Function views |
||||
|
1. Add an import: from my_app import views |
||||
|
2. Add a URL to urlpatterns: path('', views.home, name='home') |
||||
|
Class-based views |
||||
|
1. Add an import: from other_app.views import Home |
||||
|
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') |
||||
|
Including another URLconf |
||||
|
1. Import the include() function: from django.urls import include, path |
||||
|
2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) |
||||
|
""" |
||||
|
from django.contrib import admin |
||||
|
from django.urls import path, include |
||||
|
|
||||
|
urlpatterns = [ |
||||
|
path('api/', include('vislib.urls')), |
||||
|
path('admin/', admin.site.urls), |
||||
|
] |
@ -0,0 +1,16 @@ |
|||||
|
""" |
||||
|
WSGI config for py_vislib project. |
||||
|
|
||||
|
It exposes the WSGI callable as a module-level variable named ``application``. |
||||
|
|
||||
|
For more information on this file, see |
||||
|
https://docs.djangoproject.com/en/3.0/howto/deployment/wsgi/ |
||||
|
""" |
||||
|
|
||||
|
import os |
||||
|
|
||||
|
from django.core.wsgi import get_wsgi_application |
||||
|
|
||||
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'py_vislib.settings') |
||||
|
|
||||
|
application = get_wsgi_application() |
@ -0,0 +1,3 @@ |
|||||
|
from django.contrib import admin |
||||
|
|
||||
|
# Register your models here. |
@ -0,0 +1,5 @@ |
|||||
|
from django.apps import AppConfig |
||||
|
|
||||
|
|
||||
|
class VislibConfig(AppConfig): |
||||
|
name = 'vislib' |
@ -0,0 +1,10 @@ |
|||||
|
from django.utils.deprecation import MiddlewareMixin |
||||
|
|
||||
|
|
||||
|
class SameSiteMiddleware(MiddlewareMixin): |
||||
|
def process_response(self, request, response): |
||||
|
if 'sessionid' in response.cookies: |
||||
|
response.cookies['sessionid']['samesite'] = 'None' |
||||
|
if 'csrftoken' in response.cookies: |
||||
|
response.cookies['csrftoken']['samesite'] = 'None' |
||||
|
return response |
@ -0,0 +1,44 @@ |
|||||
|
from django.db import models |
||||
|
from django.contrib.auth.models import User |
||||
|
from django.utils import timezone |
||||
|
|
||||
|
def default_datetime(): |
||||
|
now = timezone.now() |
||||
|
return now |
||||
|
|
||||
|
# Create your models here. |
||||
|
class Chart(models.Model): |
||||
|
chart_id=models.CharField(max_length=64, primary_key=True) |
||||
|
chart_name=models.CharField(max_length=128) |
||||
|
desc=models.CharField(max_length=512, null=True) |
||||
|
content=models.TextField() |
||||
|
is_private=models.BooleanField() |
||||
|
status=models.IntegerField() |
||||
|
creator=models.ForeignKey(User, on_delete=models.CASCADE) |
||||
|
created_at = models.DateTimeField(db_index=True, default=default_datetime) |
||||
|
updated_at = models.DateTimeField(db_index=True, null=False) |
||||
|
|
||||
|
class Dashboard(models.Model): |
||||
|
dashboard_id=models.CharField(max_length=64, primary_key=True) |
||||
|
name=models.CharField(max_length=128) |
||||
|
desc=models.CharField(max_length=512, null=True) |
||||
|
content=models.TextField() |
||||
|
is_private=models.BooleanField() |
||||
|
status=models.IntegerField() |
||||
|
creator=models.ForeignKey(User, on_delete=models.CASCADE) |
||||
|
created_at = models.DateTimeField(db_index=True, default=default_datetime) |
||||
|
updated_at = models.DateTimeField(db_index=True, null=False) |
||||
|
|
||||
|
class ChartBoardMap(models.Model): |
||||
|
chart=models.ForeignKey(Chart, on_delete=models.CASCADE) |
||||
|
dashboard=models.ForeignKey(Dashboard, on_delete=models.CASCADE) |
||||
|
id=models.CharField(max_length=64, primary_key=True) |
||||
|
created_at = models.DateTimeField(db_index=True, default=default_datetime) |
||||
|
updated_at = models.DateTimeField(db_index=True, null=False) |
||||
|
|
||||
|
class BoardOrder(models.Model): |
||||
|
creator=models.ForeignKey(User, on_delete=models.CASCADE) |
||||
|
order=models.TextField() |
||||
|
id=models.CharField(max_length=64, primary_key=True) |
||||
|
created_at = models.DateTimeField(db_index=True, default=default_datetime) |
||||
|
updated_at = models.DateTimeField(db_index=True, null=False) |
@ -0,0 +1,3 @@ |
|||||
|
from django.test import TestCase |
||||
|
|
||||
|
# Create your tests here. |
@ -0,0 +1,25 @@ |
|||||
|
from django.urls import path |
||||
|
from . import views |
||||
|
|
||||
|
urlpatterns = [ |
||||
|
path('user/info', views.user, name='userinfo'), |
||||
|
path('user/signup', views.userSignup, name='signup'), |
||||
|
path('user/login', views.userLogin, name='login'), |
||||
|
path('user/logout', views.userLogout, name='logout'), |
||||
|
path('exesql', views.execSql, name='execSql'), |
||||
|
path('chart/list', views.chartList, name="chartList"), |
||||
|
path('chart/create', views.createChart, name="createChart"), |
||||
|
path('chart/update', views.updateChart, name="updateChart"), |
||||
|
path('chart/delete', views.deleteChart, name="deleteChart"), |
||||
|
path('chart/<uuid:chartId>', views.chartDetail, name="chartDetail"), |
||||
|
path('chartboardmap/boardbychart', views.boardByChart, name="boardByChart"), |
||||
|
path('dashboard/create', views.createDashboard, name="createDashboard"), |
||||
|
path('dashboard/update', views.updateDashboard, name="updateDashboard"), |
||||
|
path('dashboard/delete', views.deleteDashboard, name="deleteDashboard"), |
||||
|
path('dashboard/<uuid:dashboardId>', views.dashboardDetail, name="dashboardDetail"), |
||||
|
path('dashboard/list', views.dashboardList, name="dashboardList"), |
||||
|
path('dashboard/order', views.dashboardOrder, name="dashboardOrder"), |
||||
|
path('chartboard/map', views.chartBoardMap, name="chartBoardMap"), |
||||
|
path('chartboard/unmap', views.chartBoardUnmap, name="chartBoardUnmap"), |
||||
|
path('chartboardmap/chartbydashboard', views.chartByBoard, name="chartByBoard"), |
||||
|
] |
@ -0,0 +1,278 @@ |
|||||
|
import json |
||||
|
from django.shortcuts import render |
||||
|
from django.http import HttpResponse |
||||
|
from django.http import JsonResponse |
||||
|
from django.views.decorators.csrf import csrf_exempt |
||||
|
from django.contrib.auth import authenticate, login, logout |
||||
|
from django.contrib.auth.decorators import login_required |
||||
|
from django.contrib.auth.models import User |
||||
|
from MySQLdb import _mysql |
||||
|
from django.core import serializers |
||||
|
from vislib.models import Chart, Dashboard, ChartBoardMap, BoardOrder |
||||
|
from django.utils import timezone |
||||
|
import uuid |
||||
|
# Create your views here. |
||||
|
|
||||
|
def default_datetime(): |
||||
|
now = timezone.now() |
||||
|
return now |
||||
|
|
||||
|
def index(request): |
||||
|
return HttpResponse('hello python and django') |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def user(request): |
||||
|
if request.user.is_authenticated: |
||||
|
username = request.user.get_username() |
||||
|
return JsonResponse({'code': 20000, 'data': {'username': username}}) |
||||
|
else: |
||||
|
return JsonResponse({'code': 40000, 'message': 'Please login'}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def userSignup(request): |
||||
|
body = json.loads(request.body) |
||||
|
if User.objects.filter(username=body['userName']).exists(): |
||||
|
return JsonResponse({'code': 10000, 'message': 'User Name ' + body['userName'] + ' is Already Tabken.'}) |
||||
|
if User.objects.filter(email=body['email']).exists(): |
||||
|
return JsonResponse({'code': 10000, 'message': 'Email ' + body['emaul'] + ' is Registered.'}) |
||||
|
user = User.objects.create_user(body['userName'], body['email'], body['password']) |
||||
|
user.first_name=body['userName'] |
||||
|
user.save() |
||||
|
return JsonResponse({'code': 20000, 'message': 'success'}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def userLogin(request): |
||||
|
body = json.loads(request.body) |
||||
|
user = authenticate(request, username=body['userName'], password=body['password']) |
||||
|
if user is not None: |
||||
|
login(request, user) |
||||
|
return JsonResponse({'code': 20000, 'message': 'success'}) |
||||
|
else: |
||||
|
return JsonResponse({'code': 10000, 'message': 'Name or Password Not Correct, Please Try Again.'}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def userLogout(request): |
||||
|
logout(request) |
||||
|
return JsonResponse({'code': 20000, 'message': 'success'}) |
||||
|
|
||||
|
def execSql(request): |
||||
|
db=_mysql.connect( "127.0.0.1", "root", "123456xxf", "sql12298540", charset='utf8') |
||||
|
db.query(request.GET['sql']) |
||||
|
data = db.store_result().fetch_row(maxrows=0, how=2) |
||||
|
db.close() |
||||
|
json_data = [] |
||||
|
for index in range(len(data)): |
||||
|
row = data[index] |
||||
|
json_data.append({}) |
||||
|
for key in row: |
||||
|
if(key.find('.')>0): |
||||
|
column = (key.split('.'))[1] |
||||
|
else: |
||||
|
column = key |
||||
|
if isinstance(row[key], bytes): |
||||
|
json_data[index][column] = row[key].decode('UTF-8') |
||||
|
else: |
||||
|
json_data[index][column] = row[key] |
||||
|
response = { |
||||
|
'code': 20000, |
||||
|
'message': 'success', |
||||
|
'data': json_data |
||||
|
} |
||||
|
return JsonResponse(response) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def chartList(request): |
||||
|
charts = Chart.objects.filter(creator=request.user) |
||||
|
charts = serializers.serialize('json', charts) |
||||
|
charts = json.loads(charts) |
||||
|
chartArr = [] |
||||
|
for chart in charts: |
||||
|
chart['fields']['chart_id'] = chart['pk'] |
||||
|
chartArr.append(chart['fields']) |
||||
|
return JsonResponse({'code': 20000, 'data': chartArr}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def createChart(request): |
||||
|
body_unicode = request.body.decode('utf-8') |
||||
|
body = json.loads(body_unicode) |
||||
|
chart_name = body['chart_name'] |
||||
|
desc = body.get('desc', None) |
||||
|
content = body['content'] |
||||
|
creator = request.user |
||||
|
chart_id = uuid.uuid4() |
||||
|
Chart.objects.create( |
||||
|
chart_id=chart_id, |
||||
|
chart_name=chart_name, |
||||
|
desc=desc, |
||||
|
content=json.dumps(content), |
||||
|
creator=creator, |
||||
|
is_private=True, |
||||
|
status=1, |
||||
|
updated_at=default_datetime() |
||||
|
) |
||||
|
return JsonResponse({'code': 20000, 'message': 'success', 'data': {'id': chart_id}}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def updateChart(request): |
||||
|
body_unicode = request.body.decode('utf-8') |
||||
|
body = json.loads(body_unicode) |
||||
|
chart = Chart.objects.get(chart_id=body['id']) |
||||
|
chart.chart_name = body['chart_name'] |
||||
|
chart.desc = body['desc'] |
||||
|
chart.content = json.dumps(body['content']) |
||||
|
chart.updated_at = default_datetime() |
||||
|
chart.save() |
||||
|
return JsonResponse({'code': 20000, 'message': 'success', 'data': {'id': body['id']}}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def deleteChart(request): |
||||
|
body_unicode = request.body.decode('utf-8') |
||||
|
body = json.loads(body_unicode) |
||||
|
chart = Chart.objects.get(chart_id=body['chart_id']) |
||||
|
chart.delete() |
||||
|
return JsonResponse({'code': 20000, 'message': 'success'}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def chartDetail(request, chartId): |
||||
|
chartDetail = Chart.objects.get(chart_id=chartId) |
||||
|
chartDetail = serializers.serialize('json', [chartDetail]) |
||||
|
chartDetail = json.loads(chartDetail)[0] |
||||
|
|
||||
|
return JsonResponse({'code': 20000, 'message': 'success', 'data':chartDetail['fields'] }) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def createDashboard(request): |
||||
|
body_unicode = request.body.decode('utf-8') |
||||
|
body = json.loads(body_unicode) |
||||
|
name = body['name'] |
||||
|
desc = body.get('desc', '') |
||||
|
content = body.get('content', '') |
||||
|
creator = request.user |
||||
|
dashboard_id = uuid.uuid4() |
||||
|
|
||||
|
Dashboard.objects.create( |
||||
|
dashboard_id=dashboard_id, |
||||
|
name=name, |
||||
|
desc=desc, |
||||
|
content=json.dumps(body.get('content', {})), |
||||
|
creator=creator, |
||||
|
is_private=True, |
||||
|
status=1, |
||||
|
updated_at=default_datetime() |
||||
|
) |
||||
|
return JsonResponse({'code': 20000, 'message': 'success', 'data': {'id': dashboard_id}}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def updateDashboard(request): |
||||
|
body_unicode = request.body.decode('utf-8') |
||||
|
body = json.loads(body_unicode) |
||||
|
dashboard_id = body.get('dashboard_id') |
||||
|
board = Dashboard.objects.get(dashboard_id=dashboard_id) |
||||
|
board.name = body['name'] |
||||
|
board.desc = body.get('desc', '') |
||||
|
board.content = json.dumps(body.get('content', {})) |
||||
|
board.updated_at = default_datetime() |
||||
|
board.save() |
||||
|
return JsonResponse({'code': 20000, 'message': 'success', 'data': {'id': dashboard_id}}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def dashboardDetail(request, dashboardId): |
||||
|
dashboard = Dashboard.objects.get(dashboard_id= dashboardId) |
||||
|
dashboard = serializers.serialize('json',[dashboard]) |
||||
|
dashboard = json.loads(dashboard)[0] |
||||
|
dashboard['fields']['dashboard_id'] = dashboardId |
||||
|
return JsonResponse({'code': 20000, 'message': 'success', 'data': dashboard['fields']}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def deleteDashboard(request): |
||||
|
body_unicode = request.body.decode('utf-8') |
||||
|
body = json.loads(body_unicode) |
||||
|
dashboard = Dashboard.objects.get(dashboard_id=body['dashboard_id']) |
||||
|
dashboard.delete() |
||||
|
return JsonResponse({'code': 20000, 'message': 'success'}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def dashboardList(request): |
||||
|
dashboards = Dashboard.objects.filter(creator=request.user) |
||||
|
dashboards = serializers.serialize('json', dashboards) |
||||
|
dashboards = json.loads(dashboards) |
||||
|
dbArr = [] |
||||
|
for db in dashboards: |
||||
|
db['fields']['dashboard_id'] = db['pk'] |
||||
|
db['fields']['content'] = json.loads(db['fields']['content']) |
||||
|
dbArr.append(db['fields']) |
||||
|
order = BoardOrder.objects.filter(creator=request.user) |
||||
|
order = json.loads(serializers.serialize('json', order)) |
||||
|
if len(order)!=0: |
||||
|
order = order[0] |
||||
|
order = order['fields']['order'] |
||||
|
order = order.split('|') |
||||
|
else: |
||||
|
order = [] |
||||
|
return JsonResponse({'code': 20000, 'message': 'success', 'data':{'dashboards': dbArr, 'order': order} }) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def chartBoardMap(request): |
||||
|
body = request.body.decode('utf-8') |
||||
|
body = json.loads(body) |
||||
|
dashboard = Dashboard.objects.get(dashboard_id=body['dashboard_id']) |
||||
|
chart = Chart.objects.get(chart_id=body['chart_id']) |
||||
|
|
||||
|
ChartBoardMap.objects.create( |
||||
|
id=uuid.uuid4(), |
||||
|
chart=chart, |
||||
|
dashboard=dashboard, |
||||
|
updated_at=default_datetime() |
||||
|
) |
||||
|
return JsonResponse({'code': 20000, 'message': 'success'}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def chartBoardUnmap(request): |
||||
|
body = request.body.decode('utf-8') |
||||
|
body = json.loads(body) |
||||
|
chart_id = body['chart_id'] |
||||
|
dashboard_id = body['dashboard_id'] |
||||
|
map = ChartBoardMap.objects.get(chart=chart_id, dashboard=dashboard_id) |
||||
|
map.delete() |
||||
|
return JsonResponse({'code': 20000, 'message': 'success'}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def chartByBoard(request): |
||||
|
map = ChartBoardMap.objects.filter(dashboard=request.GET['dashboard_id']) |
||||
|
charts = [] |
||||
|
for item in map: |
||||
|
chart = serializers.serialize('json', [item.chart]) |
||||
|
chart = json.loads(chart)[0] |
||||
|
chart['fields']['chart_id'] = chart['pk'] |
||||
|
charts.append(chart['fields']) |
||||
|
|
||||
|
return JsonResponse({'code': 20000, 'message': 'success', 'data': charts}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def boardByChart(request): |
||||
|
map = ChartBoardMap.objects.filter(chart=request.GET['chart_id']) |
||||
|
boards = [] |
||||
|
for item in map: |
||||
|
board = serializers.serialize('json', [item.dashboard]) |
||||
|
board = json.loads(board)[0] |
||||
|
board['fields']['dashboard_id'] = board['pk'] |
||||
|
boards.append(board['fields']) |
||||
|
return JsonResponse({'code': 20000, 'message': 'success', 'data': boards}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def dashboardOrder(request): |
||||
|
body = json.loads(request.body) |
||||
|
split = '|' |
||||
|
orderStr = split.join(body['order']) |
||||
|
order = BoardOrder.objects.filter(creator=request.user) |
||||
|
if order: |
||||
|
order[0].order = orderStr |
||||
|
order[0].save() |
||||
|
else: |
||||
|
BoardOrder.objects.create( |
||||
|
order=orderStr, |
||||
|
id=uuid.uuid4(), |
||||
|
creator=request.user, |
||||
|
updated_at=default_datetime() |
||||
|
) |
||||
|
return JsonResponse({'code': 20000, 'message': 'success'}) |
Loading…
Reference in new issue