mirror of https://github.com/jumpserver/jumpserver
[Bugfix] 用户csv导入编码问题
parent
8e2891d7d7
commit
9292e48554
|
@ -248,6 +248,7 @@ class BulkImportAssetView(AdminUserRequiredMixin, JSONResponseMixin, FormView):
|
|||
f = form.cleaned_data['file']
|
||||
det_result = chardet.detect(f.read())
|
||||
f.seek(0) # reset file seek index
|
||||
|
||||
file_data = f.read().decode(det_result['encoding']).strip(codecs.BOM_UTF8.decode())
|
||||
csv_file = StringIO(file_data)
|
||||
reader = csv.reader(csv_file)
|
||||
|
|
|
@ -68,7 +68,7 @@ class BaseForm(forms.Form):
|
|||
class BasicSettingForm(BaseForm):
|
||||
SITE_URL = forms.URLField(
|
||||
label=_("Current SITE URL"),
|
||||
help_text="http://jumpserver.abc.com:8080"
|
||||
help_text="eg: http://jumpserver.abc.com:8080"
|
||||
)
|
||||
USER_GUIDE_URL = forms.URLField(
|
||||
label=_("User Guide URL"),
|
||||
|
@ -135,7 +135,7 @@ class LDAPSettingForm(BaseForm):
|
|||
AUTH_LDAP_START_TLS = forms.BooleanField(
|
||||
label=_("Use SSL"), initial=False, required=False
|
||||
)
|
||||
AUTH_LDAP = forms.BooleanField(label=_("Enable LDAP auth"), initial=False)
|
||||
AUTH_LDAP = forms.BooleanField(label=_("Enable LDAP auth"), initial=False, required=False)
|
||||
|
||||
|
||||
class TerminalSettingForm(BaseForm):
|
||||
|
|
|
@ -6,3 +6,6 @@ from django.apps import AppConfig
|
|||
class UsersConfig(AppConfig):
|
||||
name = 'users'
|
||||
|
||||
def ready(self):
|
||||
from . import signals_handler
|
||||
super().ready()
|
||||
|
|
|
@ -1,21 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
|
||||
from django.dispatch import Signal, receiver
|
||||
from django.db.models.signals import post_save
|
||||
|
||||
from common.utils import get_logger
|
||||
from .models import User
|
||||
|
||||
logger = get_logger(__file__)
|
||||
from django.dispatch import Signal
|
||||
|
||||
|
||||
@receiver(post_save, sender=User)
|
||||
def on_user_created(sender, instance=None, created=False, **kwargs):
|
||||
if created:
|
||||
logger.debug("Receive user `{}` create signal".format(instance.name))
|
||||
from .utils import send_user_created_mail
|
||||
logger.info(" - Sending welcome mail ...".format(instance.name))
|
||||
if instance.email:
|
||||
send_user_created_mail(instance)
|
||||
post_user_create = Signal(providing_args=('user',))
|
||||
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
|
||||
from django.dispatch import receiver
|
||||
from django.db.models.signals import post_save
|
||||
|
||||
from common.utils import get_logger
|
||||
from .models import User
|
||||
|
||||
logger = get_logger(__file__)
|
||||
|
||||
|
||||
@receiver(post_save, sender=User)
|
||||
def on_user_created(sender, instance=None, created=False, **kwargs):
|
||||
if created:
|
||||
logger.debug("Receive user `{}` create signal".format(instance.name))
|
||||
from .utils import send_user_created_mail
|
||||
logger.info(" - Sending welcome mail ...".format(instance.name))
|
||||
if instance.email:
|
||||
send_user_created_mail(instance)
|
|
@ -6,6 +6,7 @@ import json
|
|||
import uuid
|
||||
import csv
|
||||
import codecs
|
||||
import chardet
|
||||
from io import StringIO
|
||||
|
||||
from django.contrib import messages
|
||||
|
@ -20,6 +21,7 @@ from django.utils.translation import ugettext as _
|
|||
from django.utils.decorators import method_decorator
|
||||
from django.views import View
|
||||
from django.views.generic.base import TemplateView
|
||||
from django.db import transaction
|
||||
from django.views.generic.edit import (
|
||||
CreateView, UpdateView, FormMixin, FormView
|
||||
)
|
||||
|
@ -33,7 +35,7 @@ from common.utils import get_logger, get_object_or_none, is_uuid
|
|||
from .. import forms
|
||||
from ..models import User, UserGroup
|
||||
from ..utils import AdminUserRequiredMixin
|
||||
from ..signals import on_user_created
|
||||
from ..signals import post_user_create
|
||||
|
||||
|
||||
__all__ = [
|
||||
|
@ -212,8 +214,10 @@ class UserBulkImportView(AdminUserRequiredMixin, JSONResponseMixin, FormView):
|
|||
|
||||
# todo: need be patch, method to long
|
||||
def form_valid(self, form):
|
||||
file = form.cleaned_data['file']
|
||||
data = file.read().decode('utf-8').strip(codecs.BOM_UTF8.decode('utf-8'))
|
||||
f = form.cleaned_data['file']
|
||||
det_result = chardet.detect(f.read())
|
||||
f.seek(0) # reset file seek index
|
||||
data = f.read().decode(det_result['encoding']).strip(codecs.BOM_UTF8.decode())
|
||||
csv_file = StringIO(data)
|
||||
reader = csv.reader(csv_file)
|
||||
csv_data = [row for row in reader]
|
||||
|
@ -252,15 +256,15 @@ class UserBulkImportView(AdminUserRequiredMixin, JSONResponseMixin, FormView):
|
|||
else:
|
||||
continue
|
||||
user_dict[k] = v
|
||||
|
||||
user = get_object_or_none(User, id=id_) if is_uuid(id_) else None
|
||||
user = get_object_or_none(User, id=id_) if id_ and is_uuid(id_) else None
|
||||
if not user:
|
||||
try:
|
||||
groups = user_dict.pop('groups')
|
||||
user = User.objects.create(**user_dict)
|
||||
user.groups.set(groups)
|
||||
created.append(user_dict['username'])
|
||||
on_user_created.send(self.__class__, user=user)
|
||||
with transaction.atomic():
|
||||
groups = user_dict.pop('groups')
|
||||
user = User.objects.create(**user_dict)
|
||||
user.groups.set(groups)
|
||||
created.append(user_dict['username'])
|
||||
post_user_create.send(self.__class__, user=user)
|
||||
except Exception as e:
|
||||
failed.append('%s: %s' % (user_dict['username'], str(e)))
|
||||
else:
|
||||
|
|
Loading…
Reference in New Issue