diff --git a/apps/system/migrations/0002_auto_20220411_2148.py b/apps/system/migrations/0002_auto_20220411_2148.py new file mode 100644 index 00000000..53201cf7 --- /dev/null +++ b/apps/system/migrations/0002_auto_20220411_2148.py @@ -0,0 +1,43 @@ +# Generated by Django 3.2.12 on 2022-04-11 13:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='dicttype', + name='code', + field=models.CharField(max_length=30, verbose_name='标识'), + ), + migrations.AlterField( + model_name='post', + name='code', + field=models.CharField(blank=True, max_length=32, null=True, verbose_name='岗位标识'), + ), + migrations.AlterField( + model_name='post', + name='name', + field=models.CharField(max_length=32, verbose_name='名称'), + ), + migrations.AlterField( + model_name='role', + name='code', + field=models.CharField(blank=True, max_length=32, null=True, verbose_name='角色标识'), + ), + migrations.AlterField( + model_name='role', + name='name', + field=models.CharField(max_length=32, verbose_name='名称'), + ), + migrations.AlterField( + model_name='user', + name='phone', + field=models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号'), + ), + ] diff --git a/apps/system/models.py b/apps/system/models.py index 12950e37..23413bc6 100644 --- a/apps/system/models.py +++ b/apps/system/models.py @@ -61,8 +61,8 @@ class Role(CommonAModel): """ 角色 """ - name = models.CharField('角色', max_length=32, unique=True) - code = models.CharField('角色标识', max_length=32, unique=True, null=True, blank=True) + name = models.CharField('名称', max_length=32) + code = models.CharField('角色标识', max_length=32, null=True, blank=True) perms = models.ManyToManyField(Permission, blank=True, verbose_name='功能权限', related_name='role_perms') description = models.CharField('描述', max_length=50, blank=True, null=True) @@ -79,8 +79,8 @@ class Post(CommonAModel): """ 职位/岗位 """ - name = models.CharField('名称', max_length=32, unique=True) - code = models.CharField('岗位标识', max_length=32, unique=True, null=True, blank=True) + name = models.CharField('名称', max_length=32) + code = models.CharField('岗位标识', max_length=32, null=True, blank=True) description = models.CharField('描述', max_length=50, blank=True, null=True) roles = models.ManyToManyField(Role, verbose_name='关联角色', related_name='post_roles') POST_DATA_ALL = 10 @@ -114,7 +114,7 @@ class User(AbstractUser, CommonBModel): """ name = models.CharField('姓名', max_length=20, null=True, blank=True) phone = models.CharField('手机号', max_length=11, - null=True, blank=True, unique=True) + null=True, blank=True) avatar = models.CharField( '头像', default='/media/default/avatar.png', max_length=100, null=True, blank=True) superior = models.ForeignKey( @@ -152,7 +152,7 @@ class DictType(CommonAModel): 数据字典类型 """ name = models.CharField('名称', max_length=30) - code = models.CharField('标识', unique=True, max_length=30) + code = models.CharField('标识', max_length=30) parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='父') diff --git a/apps/system/serializers.py b/apps/system/serializers.py index 8079674a..e606a83c 100644 --- a/apps/system/serializers.py +++ b/apps/system/serializers.py @@ -140,27 +140,13 @@ class RoleCreateUpdateSerializer(CustomModelSerializer): """ 角色序列化 """ + name = serializers.CharField(label="名称", validators=[ + UniqueValidator(queryset=Role.objects.all(), message='已存在相同名称的角色')]) + code = serializers.CharField(label="标识", validators=[ + UniqueValidator(queryset=Role.objects.all(), message='已存在相同标识的角色')]) class Meta: model = Role exclude = EXCLUDE_FIELDS - - def create(self, validated_data): - if validated_data.get('name', None): - if Role.objects.filter(name=validated_data['name']).exists(): - raise serializers.ValidationError(**ROLE_NAME_EXIST) - if validated_data.get('code', None): - if Role.objects.filter(code=validated_data['code']).exists(): - raise serializers.ValidationError(**ROLE_CODE_EXIST) - return super().create(validated_data) - - def update(self, instance, validated_data): - if validated_data.get('name', None): - if Role.objects.filter(name=validated_data['name']).exclude(id=instance.id).exists(): - raise serializers.ValidationError(**ROLE_NAME_EXIST) - if validated_data.get('code', None): - if Role.objects.filter(code=validated_data['code']).exclude(id=instance.id).exists(): - raise serializers.ValidationError(**ROLE_CODE_EXIST) - return super().update(instance, validated_data) class PermissionSerializer(CustomModelSerializer): """ diff --git a/apps/utils/exceptions.py b/apps/utils/exceptions.py index 07157600..249d45c5 100644 --- a/apps/utils/exceptions.py +++ b/apps/utils/exceptions.py @@ -4,6 +4,8 @@ from rest_framework.response import Response from rest_framework import exceptions from rest_framework.views import set_rollback from django.utils.translation import gettext_lazy as _ +import traceback +from server.settings import myLogger def custom_exception_hander(exc, context): """ @@ -32,5 +34,6 @@ def custom_exception_hander(exc, context): set_rollback() data['request_id'] = request_id return Response(data, status=exc.status_code, headers=headers) - + err_str = traceback.format_exc() + myLogger.error('{}-{}'.format(request_id, err_str)) return Response(data={'err_code':'server_error', 'err_msg':'服务器错误', 'request_id': request_id}, status=500) \ No newline at end of file diff --git a/apps/utils/mixins.py b/apps/utils/mixins.py index 0d2e7ca8..945367a4 100644 --- a/apps/utils/mixins.py +++ b/apps/utils/mixins.py @@ -100,10 +100,6 @@ class MyLoggingMixin(object): def handle_exception(self, exc): response = super().handle_exception(exc) - if response.status_code >= 500: # 如果是服务器错误额外记录日志到文件 - err_str = traceback.format_exc() - self.log["errors"] = err_str - myLogger.error('{}-{}'.format(self.log['id'], err_str)) return response def finalize_response(self, request, response, *args, **kwargs): diff --git a/server/settings.py b/server/settings.py index a5aa5985..8877fc43 100644 --- a/server/settings.py +++ b/server/settings.py @@ -289,13 +289,13 @@ LOGGING = { 'loggers': { # 类型 为 django 处理所有类型的日志, 默认调用 'django': { - 'handlers': ['default', 'console', 'error'], + 'handlers': ['default', 'console'], 'level': 'INFO', 'propagate': False }, # log 调用时需要当作参数传入 'log': { - 'handlers': ['error', 'info'], + 'handlers': ['error', 'info', 'console'], 'level': 'INFO', 'propagate': True },