Commit 5af97c96 authored by ibuler's avatar ibuler

export csv

parent 7dfde3a3
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
<div class="dt-buttons btn-group"> <div class="dt-buttons btn-group">
<a class="btn btn-default buttons-pdf" tabindex="0" href="#"> <a class="btn btn-default buttons-pdf" tabindex="0" href="#">
<span>PDF</span></a> <span>PDF</span></a>
<a class="btn btn-default buttons-excel" tabindex="0" href="#"> <a class="btn btn-default buttons-csv" tabindex="0" href="#">
<span>Excel</span> <span>CSV</span>
</a> </a>
</div> </div>
</div> </div>
...@@ -88,13 +88,24 @@ $(document).ready(function(){ ...@@ -88,13 +88,24 @@ $(document).ready(function(){
}; };
var table = jumpserver.initDataTable(options); var table = jumpserver.initDataTable(options);
$('.buttons-pdf').click(function () { $('.buttons-csv').click(function () {
var users = []; var users = [];
var rows = table.rows('.selected').data(); var rows = table.rows('.selected').data();
$.each(rows, function (index, obj) { $.each(rows, function (index, obj) {
users.push(obj.id) users.push(obj.id)
}); });
console.log(users) $.ajax({
url: "{% url "users:export-user-csv" %}",
method: 'POST',
data: JSON.stringify({users_id: users}),
dataType: "json",
success: function (data, textStatus) {
window.open(data.redirect)
},
error: function () {
toastr.error('Export failed');
}
})
}); });
}).on('click', '#btn_bulk_update', function(){ }).on('click', '#btn_bulk_update', function(){
......
...@@ -40,5 +40,5 @@ urlpatterns = [ ...@@ -40,5 +40,5 @@ urlpatterns = [
name='user-group-asset-permission-create'), name='user-group-asset-permission-create'),
url(r'^user-group/(?P<pk>[0-9]+)/assets', views.UserGroupGrantedAssetView.as_view(), url(r'^user-group/(?P<pk>[0-9]+)/assets', views.UserGroupGrantedAssetView.as_view(),
name='user-group-granted-asset'), name='user-group-granted-asset'),
url(r'down-csv/', views.down_csv), url(r'^export/user/csv/', views.ExportUserCsvView.as_view(), name='export-user-csv'),
] ]
# ~*~ coding: utf-8 ~*~ # ~*~ coding: utf-8 ~*~
from __future__ import unicode_literals from __future__ import unicode_literals
from io import BytesIO import json
import uuid
import unicodecsv as csv import unicodecsv as csv
from django import forms from django import forms
from django.utils import timezone from django.utils import timezone
from django.core.cache import cache
from django.contrib.auth import login as auth_login, logout as auth_logout from django.contrib.auth import login as auth_login, logout as auth_logout
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.messages.views import SuccessMessageMixin from django.contrib.messages.views import SuccessMessageMixin
from django.core.files.storage import default_storage from django.core.files.storage import default_storage
from django.http import HttpResponseRedirect, HttpResponse from django.http import HttpResponseRedirect, HttpResponse, JsonResponse
from django.shortcuts import reverse, redirect from django.shortcuts import reverse, redirect
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.views import View
from django.views.decorators.cache import never_cache from django.views.decorators.cache import never_cache
from django.views.decorators.csrf import csrf_protect from django.views.decorators.csrf import csrf_protect, csrf_exempt
from django.views.decorators.debug import sensitive_post_parameters from django.views.decorators.debug import sensitive_post_parameters
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from django.views.generic.list import ListView from django.views.generic.list import ListView
...@@ -33,6 +36,7 @@ from .hands import write_login_log_async ...@@ -33,6 +36,7 @@ from .hands import write_login_log_async
from . import forms from . import forms
logger = get_logger(__name__) logger = get_logger(__name__)
...@@ -533,16 +537,36 @@ class BulkImportUserView(AdminUserRequiredMixin, JSONResponseMixin, FormView): ...@@ -533,16 +537,36 @@ class BulkImportUserView(AdminUserRequiredMixin, JSONResponseMixin, FormView):
return self.render_json_response(data) return self.render_json_response(data)
def down_csv(request): @method_decorator(csrf_exempt, name='dispatch')
response = HttpResponse(content_type='application/csv') class ExportUserCsvView(View):
response['Content-Disposition'] = 'attachment; filename="users-%s.csv"' % \ def get(self, request, *args, **kwargs):
timezone.localtime(timezone.now()).strftime('%Y-%m-%d') spm = request.GET.get('spm', '')
writer = csv.writer(response) print(spm)
header = [u"你好", 'username', 'email', users_id = cache.get(spm)
_('user group'), _('role'), _('phone'), _('wechat'), _('comment')] if not users_id and not isinstance(users_id, list):
writer.writerow(header) return HttpResponse('May be expired', status=404)
for user in User.objects.all():
writer.writerow([user.name, user.username, user.email, ','.join([group.name for group in user.groups.all()]), users = User.objects.filter(id__in=users_id)
user.role, user.phone, user.wechat, user.comment]) filename = 'users-%s.csv' % timezone.localtime(timezone.now()).strftime('%Y-%m-%d_%H:%M:%D')
return response response = HttpResponse(content_type='application/csv')
response['Content-Disposition'] = 'attachment; filename="%s"' % filename
writer = csv.writer(response, delimiter=str(","), lineterminator='\n',
quoting=csv.QUOTE_ALL, dialect='excel')
header = [_("name"), _('username'), _('email'), _('user group'),
_('role'), _('phone'), _('wechat'), _('comment')]
writer.writerow(header)
for user in users:
writer.writerow([user.name, user.username, user.email, ','.join([group.name for group in user.groups.all()]),
user.role, user.phone, user.wechat, user.comment])
return response
def post(self, request, *args, **kwargs):
try:
print(request.body)
users_id = json.loads(request.body).get('users_id', [])
except ValueError:
return HttpResponse('Json object not valid', status=400)
spm = uuid.uuid4().get_hex()
cache.set(spm, users_id, 300)
url = reverse('users:export-user-csv') + '?spm=%s' % spm
return JsonResponse({'redirect': url})
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment