У меня есть сайт D3js, работающий и работающий.Подход, который я использую, заключается в получении файлов из aws S3 и создании шаблонов URL, а затем их использовании с функциями d3.csv.Загрузка всех визуализаций занимает слишком много времени, потому что он использует AWS S3 пять раз, чтобы получить 5 различных CSV-файлов в качестве источника данных.
пример кода для views.py приведен ниже -
def func1(request):
LOCAL_PATH = '/var/www/dashboard/templates/graph/'
AWS_ACCESS_KEY_ID = '*********'
AWS_SECRET_ACCESS_KEY = '***********'
bucket_name = 'bucket_name'
# connect to the bucket
conn = boto.connect_s3(AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY)
bucket = conn.get_bucket(bucket_name)
# go through the list of files
bucket_list = bucket.list()
for l in bucket_list:
keyString = str(l.key)
if os.path.exists(LOCAL_PATH+keyString):
os.remove(LOCAL_PATH+keyString) #this deletes the file
l.get_contents_to_filename(LOCAL_PATH+keyString)
csv_data = open('/var/www/dashboard/templates/graph/file1.csv', 'r+').read()
response = HttpResponse(csv_data,content_type='text/csv')
return response
Я создал 5 функций для 5 файлов, которые я использовал в качестве источника данных для своей панели.
код urls.py -
urlpatterns = [
path('', views.graph, name='graph'),
path('func1/', views.func1, name='func1')
]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns = format_suffix_patterns(urlpatterns)
Я добавил 5 шаблонов URL для всех файлов.
javascript-файл с функцией d3.csv -
d3.csv("/func1/", function(data) {
freqData = data.map(function(d) { return {
hour: d.hour,
freq: {
val1: +d.val1,
val2: +d.val2,
val3: +d.val3,
val4: +d.val4
}}
});
dashboard('#id',freqData);
});
Требуется, чтобы все csv-файлы bucket были в одной функции, чтобы мы не хотели снова нажимать S3.Это означает, что нам нужно возвращать несколько ответов для каждого CSV.Также, как мы можем создать несколько шаблонов urlpattern для всех CSV и как передать их в функцию d3.csv в разных файлах javascript.Пожалуйста, помогите.