Commit 9292e485 authored by ibuler's avatar ibuler

[Bugfix] 用户csv导入编码问题

parent 8e2891d7
...@@ -248,6 +248,7 @@ class BulkImportAssetView(AdminUserRequiredMixin, JSONResponseMixin, FormView): ...@@ -248,6 +248,7 @@ class BulkImportAssetView(AdminUserRequiredMixin, JSONResponseMixin, FormView):
f = form.cleaned_data['file'] f = form.cleaned_data['file']
det_result = chardet.detect(f.read()) det_result = chardet.detect(f.read())
f.seek(0) # reset file seek index f.seek(0) # reset file seek index
file_data = f.read().decode(det_result['encoding']).strip(codecs.BOM_UTF8.decode()) file_data = f.read().decode(det_result['encoding']).strip(codecs.BOM_UTF8.decode())
csv_file = StringIO(file_data) csv_file = StringIO(file_data)
reader = csv.reader(csv_file) reader = csv.reader(csv_file)
......
...@@ -68,7 +68,7 @@ class BaseForm(forms.Form): ...@@ -68,7 +68,7 @@ class BaseForm(forms.Form):
class BasicSettingForm(BaseForm): class BasicSettingForm(BaseForm):
SITE_URL = forms.URLField( SITE_URL = forms.URLField(
label=_("Current SITE URL"), label=_("Current SITE URL"),
help_text="http://jumpserver.abc.com:8080" help_text="eg: http://jumpserver.abc.com:8080"
) )
USER_GUIDE_URL = forms.URLField( USER_GUIDE_URL = forms.URLField(
label=_("User Guide URL"), label=_("User Guide URL"),
...@@ -135,7 +135,7 @@ class LDAPSettingForm(BaseForm): ...@@ -135,7 +135,7 @@ class LDAPSettingForm(BaseForm):
AUTH_LDAP_START_TLS = forms.BooleanField( AUTH_LDAP_START_TLS = forms.BooleanField(
label=_("Use SSL"), initial=False, required=False 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): class TerminalSettingForm(BaseForm):
......
...@@ -6,3 +6,6 @@ from django.apps import AppConfig ...@@ -6,3 +6,6 @@ from django.apps import AppConfig
class UsersConfig(AppConfig): class UsersConfig(AppConfig):
name = 'users' name = 'users'
def ready(self):
from . import signals_handler
super().ready()
# -*- coding: utf-8 -*- from django.dispatch import Signal
#
from django.dispatch import Signal, receiver
from django.db.models.signals import post_save
from common.utils import get_logger post_user_create = Signal(providing_args=('user',))
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)
# -*- 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)
\ No newline at end of file
...@@ -6,6 +6,7 @@ import json ...@@ -6,6 +6,7 @@ import json
import uuid import uuid
import csv import csv
import codecs import codecs
import chardet
from io import StringIO from io import StringIO
from django.contrib import messages from django.contrib import messages
...@@ -20,6 +21,7 @@ from django.utils.translation import ugettext as _ ...@@ -20,6 +21,7 @@ from django.utils.translation import ugettext as _
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.views import View from django.views import View
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from django.db import transaction
from django.views.generic.edit import ( from django.views.generic.edit import (
CreateView, UpdateView, FormMixin, FormView CreateView, UpdateView, FormMixin, FormView
) )
...@@ -33,7 +35,7 @@ from common.utils import get_logger, get_object_or_none, is_uuid ...@@ -33,7 +35,7 @@ from common.utils import get_logger, get_object_or_none, is_uuid
from .. import forms from .. import forms
from ..models import User, UserGroup from ..models import User, UserGroup
from ..utils import AdminUserRequiredMixin from ..utils import AdminUserRequiredMixin
from ..signals import on_user_created from ..signals import post_user_create
__all__ = [ __all__ = [
...@@ -212,8 +214,10 @@ class UserBulkImportView(AdminUserRequiredMixin, JSONResponseMixin, FormView): ...@@ -212,8 +214,10 @@ class UserBulkImportView(AdminUserRequiredMixin, JSONResponseMixin, FormView):
# todo: need be patch, method to long # todo: need be patch, method to long
def form_valid(self, form): def form_valid(self, form):
file = form.cleaned_data['file'] f = form.cleaned_data['file']
data = file.read().decode('utf-8').strip(codecs.BOM_UTF8.decode('utf-8')) 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) csv_file = StringIO(data)
reader = csv.reader(csv_file) reader = csv.reader(csv_file)
csv_data = [row for row in reader] csv_data = [row for row in reader]
...@@ -252,15 +256,15 @@ class UserBulkImportView(AdminUserRequiredMixin, JSONResponseMixin, FormView): ...@@ -252,15 +256,15 @@ class UserBulkImportView(AdminUserRequiredMixin, JSONResponseMixin, FormView):
else: else:
continue continue
user_dict[k] = v user_dict[k] = v
user = get_object_or_none(User, id=id_) if id_ and is_uuid(id_) else None
user = get_object_or_none(User, id=id_) if is_uuid(id_) else None
if not user: if not user:
try: try:
groups = user_dict.pop('groups') with transaction.atomic():
user = User.objects.create(**user_dict) groups = user_dict.pop('groups')
user.groups.set(groups) user = User.objects.create(**user_dict)
created.append(user_dict['username']) user.groups.set(groups)
on_user_created.send(self.__class__, user=user) created.append(user_dict['username'])
post_user_create.send(self.__class__, user=user)
except Exception as e: except Exception as e:
failed.append('%s: %s' % (user_dict['username'], str(e))) failed.append('%s: %s' % (user_dict['username'], str(e)))
else: else:
......
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