东索
5 years ago
committed by
GitHub
22 changed files with 738 additions and 185 deletions
@ -0,0 +1,5 @@ |
|||||
|
[MASTER] |
||||
|
|
||||
|
ignore=migrations |
||||
|
disable= |
||||
|
C0114, # missing-module-docstring |
@ -0,0 +1,57 @@ |
|||||
|
#!/usr/bin/env python |
||||
|
# -*- coding:utf-8 -*- |
||||
|
#@author: rui.xu |
||||
|
#这里使用pycrypto库 |
||||
|
#按照方法:easy_install pycrypto |
||||
|
|
||||
|
from Crypto.Cipher import AES |
||||
|
from binascii import b2a_hex, a2b_hex |
||||
|
from django.conf import settings |
||||
|
|
||||
|
|
||||
|
class prpcrypt(): |
||||
|
def __init__(self,key): |
||||
|
self.key = key |
||||
|
self.mode = AES.MODE_CBC |
||||
|
|
||||
|
#加密函数,如果text不足16位就用空格补足为16位, |
||||
|
#如果大于16当时不是16的倍数,那就补足为16的倍数。 |
||||
|
def encrypt(self,text): |
||||
|
cryptor = AES.new(self.key,self.mode, b'0000000000000000') |
||||
|
#这里密钥key 长度必须为16(AES-128), |
||||
|
#24(AES-192),或者32 (AES-256)Bytes 长度 |
||||
|
#目前AES-128 足够目前使用 |
||||
|
# nonce = cryptor.nonce |
||||
|
length = 32 |
||||
|
count = len(text) |
||||
|
if count < length: |
||||
|
add = (length-count) |
||||
|
#\0 backspace |
||||
|
text = text + ('\0' * add) |
||||
|
elif count > length: |
||||
|
add = (length-(count % length)) |
||||
|
text = text + ('\0' * add) |
||||
|
print(text) |
||||
|
self.ciphertext = cryptor.encrypt(text.encode("utf8")) |
||||
|
#因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题 |
||||
|
#所以这里统一把加密后的字符串转化为16进制字符串 |
||||
|
return b2a_hex(self.ciphertext) |
||||
|
|
||||
|
#解密后,去掉补足的空格用strip() 去掉 |
||||
|
def decrypt(self,text): |
||||
|
cryptor = AES.new(self.key,self.mode,b'0000000000000000') |
||||
|
plain_text = cryptor.decrypt(a2b_hex(text)).decode("utf8") |
||||
|
return plain_text.rstrip('\0') |
||||
|
|
||||
|
pc = prpcrypt(settings.CRYPT_KEY.encode('utf8')) #初始化密钥 |
||||
|
|
||||
|
if __name__ == '__main__': |
||||
|
# for test |
||||
|
print(settings.CRYPT_KEY) |
||||
|
pc = prpcrypt(settings.CRYPT_KEY.encode('utf8')) #初始化密钥 |
||||
|
import sys |
||||
|
str = sys.argv[1] |
||||
|
e = pc.encrypt(str) #加密 |
||||
|
print("加密:",e) |
||||
|
d = pc.decrypt(e) #解密 |
||||
|
print("解密:",d) |
@ -1,3 +1 @@ |
|||||
from django.contrib import admin |
|
||||
|
|
||||
# Register your models here. |
# Register your models here. |
||||
|
@ -0,0 +1,66 @@ |
|||||
|
# Generated by Django 3.0.4 on 2020-04-02 03:31 |
||||
|
|
||||
|
from django.conf import settings |
||||
|
from django.db import migrations, models |
||||
|
import django.db.models.deletion |
||||
|
import vislib.models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
initial = True |
||||
|
|
||||
|
dependencies = [ |
||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='Chart', |
||||
|
fields=[ |
||||
|
('chart_id', models.CharField(max_length=64, primary_key=True, serialize=False)), |
||||
|
('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()), |
||||
|
('created_at', models.DateTimeField(db_index=True, default=vislib.models.default_datetime)), |
||||
|
('updated_at', models.DateTimeField(db_index=True)), |
||||
|
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), |
||||
|
], |
||||
|
), |
||||
|
migrations.CreateModel( |
||||
|
name='Dashboard', |
||||
|
fields=[ |
||||
|
('dashboard_id', models.CharField(max_length=64, primary_key=True, serialize=False)), |
||||
|
('name', models.CharField(max_length=128)), |
||||
|
('desc', models.CharField(max_length=512, null=True)), |
||||
|
('content', models.TextField()), |
||||
|
('is_private', models.BooleanField()), |
||||
|
('status', models.IntegerField()), |
||||
|
('created_at', models.DateTimeField(db_index=True, default=vislib.models.default_datetime)), |
||||
|
('updated_at', models.DateTimeField(db_index=True)), |
||||
|
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), |
||||
|
], |
||||
|
), |
||||
|
migrations.CreateModel( |
||||
|
name='ChartBoardMap', |
||||
|
fields=[ |
||||
|
('id', models.CharField(max_length=64, primary_key=True, serialize=False)), |
||||
|
('created_at', models.DateTimeField(db_index=True, default=vislib.models.default_datetime)), |
||||
|
('updated_at', models.DateTimeField(db_index=True)), |
||||
|
('chart', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='vislib.Chart')), |
||||
|
('dashboard', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='vislib.Dashboard')), |
||||
|
], |
||||
|
), |
||||
|
migrations.CreateModel( |
||||
|
name='BoardOrder', |
||||
|
fields=[ |
||||
|
('order', models.TextField()), |
||||
|
('id', models.CharField(max_length=64, primary_key=True, serialize=False)), |
||||
|
('created_at', models.DateTimeField(db_index=True, default=vislib.models.default_datetime)), |
||||
|
('updated_at', models.DateTimeField(db_index=True)), |
||||
|
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), |
||||
|
], |
||||
|
), |
||||
|
] |
@ -0,0 +1,42 @@ |
|||||
|
# Generated by Django 3.0.4 on 2020-04-14 02:00 |
||||
|
|
||||
|
from django.conf import settings |
||||
|
from django.db import migrations, models |
||||
|
import django.db.models.deletion |
||||
|
import vislib.models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||
|
('vislib', '0001_initial'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='SourceDataBase', |
||||
|
fields=[ |
||||
|
('host', models.CharField(max_length=32)), |
||||
|
('port', models.IntegerField()), |
||||
|
('username', models.CharField(max_length=32)), |
||||
|
('password', models.CharField(max_length=64)), |
||||
|
('database', models.CharField(max_length=32)), |
||||
|
('id', models.CharField(max_length=64, primary_key=True, serialize=False)), |
||||
|
('created_at', models.DateTimeField(db_index=True, default=vislib.models.default_datetime)), |
||||
|
('updated_at', models.DateTimeField(db_index=True)), |
||||
|
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), |
||||
|
], |
||||
|
), |
||||
|
migrations.CreateModel( |
||||
|
name='SourceDataTable', |
||||
|
fields=[ |
||||
|
('table', models.CharField(max_length=32)), |
||||
|
('id', models.CharField(max_length=64, primary_key=True, serialize=False)), |
||||
|
('created_at', models.DateTimeField(db_index=True, default=vislib.models.default_datetime)), |
||||
|
('updated_at', models.DateTimeField(db_index=True)), |
||||
|
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), |
||||
|
('database', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='vislib.SourceDataBase')), |
||||
|
], |
||||
|
), |
||||
|
] |
@ -0,0 +1,18 @@ |
|||||
|
# Generated by Django 3.0.4 on 2020-04-15 01:13 |
||||
|
|
||||
|
from django.db import migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('vislib', '0002_sourcedatabase_sourcedatatable'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RenameField( |
||||
|
model_name='sourcedatabase', |
||||
|
old_name='id', |
||||
|
new_name='source_id', |
||||
|
), |
||||
|
] |
@ -0,0 +1,23 @@ |
|||||
|
# Generated by Django 3.0.4 on 2020-04-15 01:20 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('vislib', '0003_auto_20200415_0913'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name='sourcedatabase', |
||||
|
name='is_private', |
||||
|
field=models.BooleanField(default=True), |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='sourcedatabase', |
||||
|
name='status', |
||||
|
field=models.IntegerField(default=1), |
||||
|
), |
||||
|
] |
@ -0,0 +1,25 @@ |
|||||
|
# Generated by Django 3.0.4 on 2020-04-15 01:34 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('vislib', '0004_auto_20200415_0920'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name='sourcedatabase', |
||||
|
name='base_alias', |
||||
|
field=models.CharField(default='', max_length=32), |
||||
|
preserve_default=False, |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='sourcedatatable', |
||||
|
name='table_alias', |
||||
|
field=models.CharField(default='', max_length=32), |
||||
|
preserve_default=False, |
||||
|
), |
||||
|
] |
@ -0,0 +1,18 @@ |
|||||
|
# Generated by Django 3.0.4 on 2020-04-15 15:50 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('vislib', '0005_auto_20200415_0934'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name='sourcedatatable', |
||||
|
name='status', |
||||
|
field=models.IntegerField(default=1), |
||||
|
), |
||||
|
] |
@ -0,0 +1,20 @@ |
|||||
|
# Generated by Django 3.0.4 on 2020-04-17 15:15 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
import django.db.models.deletion |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('vislib', '0006_sourcedatatable_status'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name='chart', |
||||
|
name='source_id', |
||||
|
field=models.ForeignKey(default='ce2f9129-c4a8-40fe-934f-1385824ca23c', on_delete=django.db.models.deletion.CASCADE, to='vislib.SourceDataBase'), |
||||
|
preserve_default=False, |
||||
|
), |
||||
|
] |
@ -0,0 +1,18 @@ |
|||||
|
# Generated by Django 3.0.4 on 2020-04-25 01:17 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('vislib', '0007_chart_source_id'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterField( |
||||
|
model_name='sourcedatabase', |
||||
|
name='password', |
||||
|
field=models.CharField(max_length=256), |
||||
|
), |
||||
|
] |
@ -1,3 +1 @@ |
|||||
from django.test import TestCase |
|
||||
|
|
||||
# Create your tests here. |
# Create your tests here. |
||||
|
@ -1,25 +1,37 @@ |
|||||
from django.urls import path |
from django.urls import path |
||||
from . import views |
from .views import user, chart, dashboard, views, source |
||||
|
|
||||
urlpatterns = [ |
urlpatterns = [ |
||||
path('user/info', views.user, name='userinfo'), |
path('user/info', user.userInfo, name='userinfo'), |
||||
path('user/signup', views.userSignup, name='signup'), |
path('user/signup', user.userSignup, name='signup'), |
||||
path('user/login', views.userLogin, name='login'), |
path('user/login', user.userLogin, name='login'), |
||||
path('user/logout', views.userLogout, name='logout'), |
path('user/logout', user.userLogout, name='logout'), |
||||
path('exesql', views.execSql, name='execSql'), |
|
||||
path('chart/list', views.chartList, name="chartList"), |
path('exesql', views.execSql, name='execSql'), |
||||
path('chart/create', views.createChart, name="createChart"), |
|
||||
path('chart/update', views.updateChart, name="updateChart"), |
path('chart/list', chart.chartList, name="chartList"), |
||||
path('chart/delete', views.deleteChart, name="deleteChart"), |
path('chart/create', chart.createChart, name="createChart"), |
||||
path('chart/<uuid:chartId>', views.chartDetail, name="chartDetail"), |
path('chart/update', chart.updateChart, name="updateChart"), |
||||
path('chartboardmap/boardbychart', views.boardByChart, name="boardByChart"), |
path('chart/delete', chart.deleteChart, name="deleteChart"), |
||||
path('dashboard/create', views.createDashboard, name="createDashboard"), |
path('chart/<uuid:chartId>', chart.chartDetail, name="chartDetail"), |
||||
path('dashboard/update', views.updateDashboard, name="updateDashboard"), |
|
||||
path('dashboard/delete', views.deleteDashboard, name="deleteDashboard"), |
path('chartboardmap/boardbychart', dashboard.boardByChart, name="boardByChart"), |
||||
path('dashboard/<uuid:dashboardId>', views.dashboardDetail, name="dashboardDetail"), |
path('dashboard/create', dashboard.createDashboard, name="createDashboard"), |
||||
path('dashboard/list', views.dashboardList, name="dashboardList"), |
path('dashboard/update', dashboard.updateDashboard, name="updateDashboard"), |
||||
path('dashboard/order', views.dashboardOrder, name="dashboardOrder"), |
path('dashboard/delete', dashboard.deleteDashboard, name="deleteDashboard"), |
||||
path('chartboard/map', views.chartBoardMap, name="chartBoardMap"), |
path('dashboard/<uuid:dashboardId>', dashboard.dashboardDetail, name="dashboardDetail"), |
||||
path('chartboard/unmap', views.chartBoardUnmap, name="chartBoardUnmap"), |
path('dashboard/list', dashboard.dashboardList, name="dashboardList"), |
||||
path('chartboardmap/chartbydashboard', views.chartByBoard, name="chartByBoard"), |
path('dashboard/order', dashboard.dashboardOrder, name="dashboardOrder"), |
||||
|
path('chartboard/map', dashboard.chartBoardMap, name="chartBoardMap"), |
||||
|
path('chartboard/unmap', dashboard.chartBoardUnmap, name="chartBoardUnmap"), |
||||
|
path('chartboardmap/chartbydashboard', dashboard.chartByBoard, name="chartByBoard"), |
||||
|
|
||||
|
path('source/list', source.sourceList, name="sourceList"), |
||||
|
path('source/create', source.createSource, name="createSource"), |
||||
|
path('source/update', source.updateSource, name="updateSource"), |
||||
|
path('source/delete', source.deleteSource, name="deleteSource"), |
||||
|
path('source/<uuid:sourceId>', source.sourceDetail, name="sourceDetail"), |
||||
|
path('source/tables/<uuid:sourceId>', source.sourceTables, name="sourceTables"), |
||||
|
path('source/tables/save', source.sourceTableSave, name="sourceTableSave"), |
||||
|
path('source/tables/<uuid:sourceId>/linked', source.sourceLinkedTables, name="sourceLinkedTables"), |
||||
] |
] |
@ -0,0 +1,75 @@ |
|||||
|
import json |
||||
|
from django.shortcuts import render |
||||
|
from django.http import JsonResponse |
||||
|
from django.views.decorators.csrf import csrf_exempt |
||||
|
from django.core import serializers |
||||
|
from vislib.models import Chart, SourceDataBase |
||||
|
from django.utils import timezone |
||||
|
import uuid |
||||
|
|
||||
|
def default_datetime(): |
||||
|
now = timezone.now() |
||||
|
return now |
||||
|
|
||||
|
@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'] |
||||
|
source_id = SourceDataBase.objects.get(source_id=body['source_id']) |
||||
|
creator = request.user |
||||
|
chart_id = uuid.uuid4() |
||||
|
Chart.objects.create( |
||||
|
chart_id=chart_id, |
||||
|
source_id=source_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.source_id = SourceDataBase.objects.get(source_id=body['source_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'] }) |
@ -1,145 +1,16 @@ |
|||||
import json |
import json |
||||
from django.shortcuts import render |
from django.shortcuts import render |
||||
from django.http import HttpResponse |
|
||||
from django.http import JsonResponse |
from django.http import JsonResponse |
||||
from django.views.decorators.csrf import csrf_exempt |
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 django.core import serializers |
||||
from vislib.models import Chart, Dashboard, ChartBoardMap, BoardOrder |
from vislib.models import Chart, Dashboard, ChartBoardMap, BoardOrder |
||||
from django.utils import timezone |
from django.utils import timezone |
||||
import uuid |
import uuid |
||||
# Create your views here. |
|
||||
|
|
||||
def default_datetime(): |
def default_datetime(): |
||||
now = timezone.now() |
now = timezone.now() |
||||
return 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 |
@csrf_exempt |
||||
def createDashboard(request): |
def createDashboard(request): |
||||
body_unicode = request.body.decode('utf-8') |
body_unicode = request.body.decode('utf-8') |
@ -0,0 +1,173 @@ |
|||||
|
import json |
||||
|
from django.shortcuts import render |
||||
|
from django.http import JsonResponse |
||||
|
from django.views.decorators.csrf import csrf_exempt |
||||
|
from django.core import serializers |
||||
|
from vislib.models import SourceDataBase, SourceDataTable |
||||
|
from django.utils import timezone |
||||
|
from common.utils.aes import pc |
||||
|
from MySQLdb import _mysql |
||||
|
import uuid |
||||
|
|
||||
|
def default_datetime(): |
||||
|
now = timezone.now() |
||||
|
return now |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def createSource(request): |
||||
|
body_unicode = request.body.decode('utf-8') |
||||
|
body = json.loads(body_unicode) |
||||
|
host = body['host'] |
||||
|
port = body.get('port', 3306) |
||||
|
username = body.get('username') |
||||
|
password = pc.encrypt(body.get('password')).decode('utf-8') |
||||
|
database = body.get('database') |
||||
|
base_alias = body.get('base_alias') |
||||
|
creator = request.user |
||||
|
source_id = uuid.uuid4() |
||||
|
|
||||
|
SourceDataBase.objects.create( |
||||
|
source_id=source_id, |
||||
|
host=host, |
||||
|
port=port, |
||||
|
username=username, |
||||
|
password=password, |
||||
|
database=database, |
||||
|
base_alias=base_alias, |
||||
|
creator=creator, |
||||
|
is_private=True, |
||||
|
status=1, |
||||
|
updated_at=default_datetime() |
||||
|
) |
||||
|
return JsonResponse({'code': 20000, 'message': 'success', 'data': {'id': source_id}}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def deleteSource(request): |
||||
|
body_unicode = request.body.decode('utf-8') |
||||
|
body = json.loads(body_unicode) |
||||
|
source = SourceDataBase.objects.get(source_id=body['source_id']) |
||||
|
source.delete() |
||||
|
return JsonResponse({'code': 20000, 'message': 'success'}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def updateSource(request): |
||||
|
body_unicode = request.body.decode('utf-8') |
||||
|
body = json.loads(body_unicode) |
||||
|
source = SourceDataBase.objects.get(source_id=body['source_id']) |
||||
|
source.host = body['host'] |
||||
|
source.port = body.get('port', 3306) |
||||
|
source.username = body.get('username') |
||||
|
if body.get('password'): |
||||
|
source.password = pc.encrypt(body.get('password')) |
||||
|
else: |
||||
|
source = serializers.serialize('json', [source]) |
||||
|
source = json.loads(source)[0]['fields'] |
||||
|
source.password = source['password'] |
||||
|
source.database = body.get('database') |
||||
|
source.base_alias = body.get('base_alias') |
||||
|
|
||||
|
source.save() |
||||
|
return JsonResponse({'code': 20000, 'message': 'success'}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def sourceList(request): |
||||
|
sourceList = SourceDataBase.objects.filter(creator=request.user) |
||||
|
sourceList = serializers.serialize('json', sourceList) |
||||
|
sourceList = json.loads(sourceList) |
||||
|
sourceArr = [] |
||||
|
for source in sourceList: |
||||
|
source['fields']['source_id'] = source['pk'] |
||||
|
source['fields']['password'] = None |
||||
|
sourceArr.append(source['fields']) |
||||
|
return JsonResponse({'code': 20000, 'data': sourceArr}) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def sourceDetail(request, sourceId): |
||||
|
sourceDetail = SourceDataBase.objects.get(source_id=sourceId) |
||||
|
sourceDetail = serializers.serialize('json', [sourceDetail]) |
||||
|
sourceDetail = json.loads(sourceDetail)[0] |
||||
|
|
||||
|
return JsonResponse({'code': 20000, 'message': 'success', 'data':sourceDetail['fields'] }) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def sourceTables(request, sourceId): |
||||
|
try: |
||||
|
tables = SourceDataTable.objects.get(database=sourceId) |
||||
|
tables = serializers.serialize('json', [tables]) |
||||
|
tables = json.loads(tables) |
||||
|
json_data = [] |
||||
|
for table in tables: |
||||
|
json_data.append(table['fields']) |
||||
|
|
||||
|
except: |
||||
|
source = SourceDataBase.objects.get(source_id=sourceId) |
||||
|
source = serializers.serialize('json', [source]) |
||||
|
source = json.loads(source)[0]['fields'] |
||||
|
password = source['password'].encode(('utf-8')) |
||||
|
print(password) |
||||
|
host = source['host'] |
||||
|
username = source['username'] |
||||
|
port = source['port'] |
||||
|
password = pc.decrypt(password) |
||||
|
database = source['database'] |
||||
|
print(password) |
||||
|
|
||||
|
db=_mysql.connect( |
||||
|
host=host, |
||||
|
port=int(port), |
||||
|
user=username, |
||||
|
passwd=password, |
||||
|
db=database, |
||||
|
charset='utf8' |
||||
|
) |
||||
|
db.query('show tables;') |
||||
|
tables = db.store_result().fetch_row(maxrows=0, how=2) |
||||
|
db.close() |
||||
|
json_data = list(tables[0].values()) |
||||
|
for i, table in enumerate(json_data): |
||||
|
json_data[i] = { |
||||
|
'table': table.decode('utf-8'), |
||||
|
'status': 0 |
||||
|
} |
||||
|
|
||||
|
|
||||
|
return JsonResponse({'code': 20000, 'message': 'success', 'data': json_data }) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
|
||||
|
def sourceTableSave(request): |
||||
|
body_unicode = request.body.decode('utf-8') |
||||
|
body = json.loads(body_unicode) |
||||
|
print(body) |
||||
|
source_id = body['source_id'] |
||||
|
SourceDataTable.objects.filter(database=source_id).delete() |
||||
|
source = SourceDataBase.objects.get(source_id=source_id) |
||||
|
|
||||
|
for table in body['tables']: |
||||
|
tableConfig = SourceDataTable.objects.create( |
||||
|
id=uuid.uuid4(), |
||||
|
database=source, |
||||
|
table=table['table'], |
||||
|
table_alias=table['table_alias'], |
||||
|
creator=request.user, |
||||
|
status=table['status'], |
||||
|
updated_at=default_datetime() |
||||
|
) |
||||
|
tableConfig.save() |
||||
|
return JsonResponse({'code': 20000, 'message': 'success' }) |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def sourceLinkedTables(request, sourceId): |
||||
|
try: |
||||
|
tables = SourceDataTable.objects.get(database=sourceId) |
||||
|
tables = serializers.serialize('json', [tables]) |
||||
|
tables = json.loads(tables) |
||||
|
json_data = [] |
||||
|
for table in tables: |
||||
|
json_data.append(table['fields']) |
||||
|
|
||||
|
except: |
||||
|
json_data = [] |
||||
|
|
||||
|
|
||||
|
return JsonResponse({'code': 20000, 'message': 'success', 'data': json_data }) |
@ -0,0 +1,43 @@ |
|||||
|
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 |
||||
|
|
||||
|
@csrf_exempt |
||||
|
def userInfo(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'}) |
@ -0,0 +1,64 @@ |
|||||
|
import json |
||||
|
from django.http import JsonResponse |
||||
|
from django.views.decorators.csrf import csrf_exempt |
||||
|
from MySQLdb import _mysql |
||||
|
from django.core import serializers |
||||
|
from vislib.models import SourceDataBase, SourceDataTable |
||||
|
from django.utils import timezone |
||||
|
from common.utils.aes import pc |
||||
|
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 execSql(request): |
||||
|
body_unicode = request.body.decode('utf-8') |
||||
|
body = json.loads(body_unicode) |
||||
|
sql = body['sql'] |
||||
|
sourceId = body['source_id'] |
||||
|
source = SourceDataBase.objects.get(source_id=sourceId) |
||||
|
source = serializers.serialize('json', [source]) |
||||
|
source = json.loads(source)[0]['fields'] |
||||
|
host = source['host'] |
||||
|
username = source['username'] |
||||
|
port = source['port'] |
||||
|
password = pc.decrypt(source['password']) |
||||
|
database = source['database'] |
||||
|
|
||||
|
db=_mysql.connect( |
||||
|
host=host, |
||||
|
port=int(port), |
||||
|
user=username, |
||||
|
passwd=password, |
||||
|
db=database, |
||||
|
charset='utf8' |
||||
|
) |
||||
|
db.query(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) |
Loading…
Reference in new issue