Compare commits
16 Commits
f9a9774af7
...
f9584f6a00
| Author | SHA1 | Date |
|---|---|---|
|
|
f9584f6a00 | |
|
|
6d4fc8acba | |
|
|
c0064903f4 | |
|
|
e4fa2561ee | |
|
|
4a9a94e04b | |
|
|
25cdfc71d6 | |
|
|
00034d4c79 | |
|
|
982a246263 | |
|
|
161699c17e | |
|
|
d99f5ed4a4 | |
|
|
54db14937e | |
|
|
986c82f838 | |
|
|
434002ba98 | |
|
|
a8477ce63e | |
|
|
c4f86cf961 | |
|
|
f79f40b9ad |
|
|
@ -7,6 +7,7 @@ from rest_framework.exceptions import ParseError
|
||||||
class UserFilterSet(filters.FilterSet):
|
class UserFilterSet(filters.FilterSet):
|
||||||
ubelong_dept__name = filters.CharFilter(label='归属于该部门及以下(按名称)', method='filter_ubelong_dept__name')
|
ubelong_dept__name = filters.CharFilter(label='归属于该部门及以下(按名称)', method='filter_ubelong_dept__name')
|
||||||
ubelong_dept = filters.CharFilter(label='归属于该部门及以下', method='filter_ubelong_dept')
|
ubelong_dept = filters.CharFilter(label='归属于该部门及以下', method='filter_ubelong_dept')
|
||||||
|
has_perm = filters.CharFilter(label='拥有指定权限标识', method='filter_has_perm')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
|
|
@ -37,6 +38,9 @@ class UserFilterSet(filters.FilterSet):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise ParseError(f"部门ID错误: {value} {str(e)}")
|
raise ParseError(f"部门ID错误: {value} {str(e)}")
|
||||||
return queryset.filter(belong_dept__in=depts)
|
return queryset.filter(belong_dept__in=depts)
|
||||||
|
|
||||||
|
def filter_has_perm(self, queryset, name, value):
|
||||||
|
return queryset.filter(up_user__post__pr_post__role__perms__codes__contains=value)
|
||||||
|
|
||||||
|
|
||||||
class DeptFilterSet(filters.FilterSet):
|
class DeptFilterSet(filters.FilterSet):
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,120 @@
|
||||||
|
# Generated by Django 4.2.27 on 2026-01-16 06:41
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('system', '0006_auto_20241213_1249'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dept',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dept',
|
||||||
|
name='third_info',
|
||||||
|
field=models.JSONField(blank=True, default=dict, verbose_name='三方系统信息'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dept',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dictionary',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dictionary',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dicttype',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dicttype',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='file',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='file',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='myschedule',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='myschedule',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='post',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='post',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='postrole',
|
||||||
|
name='post',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pr_post', to='system.post', verbose_name='关联岗位'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='postrole',
|
||||||
|
name='role',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pr_role', to='system.role', verbose_name='关联角色'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='role',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='role',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='user',
|
||||||
|
name='belong_dept',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_belong_dept', to='system.dept', verbose_name='所属部门'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='user',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='user',
|
||||||
|
name='roles',
|
||||||
|
field=models.ManyToManyField(blank=True, to='system.role', verbose_name='关联角色'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='user',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,100 @@
|
||||||
|
# Generated by Django 4.2.19 on 2025-02-23 02:59
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('system', '0006_auto_20241213_1249'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dept',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dept',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dictionary',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dictionary',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dicttype',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dicttype',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='file',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='file',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='myschedule',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='myschedule',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='post',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='post',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='role',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='role',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='user',
|
||||||
|
name='belong_dept',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_belong_dept', to='system.dept', verbose_name='所属部门'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='user',
|
||||||
|
name='create_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='user',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
# Generated by Django 4.2.27 on 2026-01-16 07:09
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('system', '0007_alter_dept_create_by_alter_dept_third_info_and_more'),
|
||||||
|
('system', '0007_alter_dept_create_by_alter_dept_update_by_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
]
|
||||||
|
|
@ -54,7 +54,7 @@ class Dept(ParentModel, CommonAModel):
|
||||||
name = models.CharField('名称', max_length=60)
|
name = models.CharField('名称', max_length=60)
|
||||||
type = models.CharField('类型', max_length=20, default='dept')
|
type = models.CharField('类型', max_length=20, default='dept')
|
||||||
sort = models.PositiveSmallIntegerField('排序标记', default=1)
|
sort = models.PositiveSmallIntegerField('排序标记', default=1)
|
||||||
third_info = models.JSONField('三方系统信息', default=dict)
|
third_info = models.JSONField('三方系统信息', default=dict, blank=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = '部门'
|
verbose_name = '部门'
|
||||||
|
|
@ -109,9 +109,9 @@ class PostRole(BaseModel):
|
||||||
data_range = models.PositiveSmallIntegerField('数据权限范围', choices=DataFilter.choices,
|
data_range = models.PositiveSmallIntegerField('数据权限范围', choices=DataFilter.choices,
|
||||||
default=DataFilter.THISLEVEL_AND_BELOW)
|
default=DataFilter.THISLEVEL_AND_BELOW)
|
||||||
post = models.ForeignKey(Post, verbose_name='关联岗位',
|
post = models.ForeignKey(Post, verbose_name='关联岗位',
|
||||||
on_delete=models.CASCADE)
|
on_delete=models.CASCADE, related_name="pr_post")
|
||||||
role = models.ForeignKey(Role, verbose_name='关联角色',
|
role = models.ForeignKey(Role, verbose_name='关联角色',
|
||||||
on_delete=models.CASCADE)
|
on_delete=models.CASCADE, related_name='pr_role')
|
||||||
|
|
||||||
|
|
||||||
class SoftDeletableUserManager(SoftDeletableManagerMixin, UserManager):
|
class SoftDeletableUserManager(SoftDeletableManagerMixin, UserManager):
|
||||||
|
|
@ -134,7 +134,7 @@ class User(AbstractUser, CommonBModel):
|
||||||
posts = models.ManyToManyField(
|
posts = models.ManyToManyField(
|
||||||
Post, through='system.userpost', related_name='user_posts')
|
Post, through='system.userpost', related_name='user_posts')
|
||||||
depts = models.ManyToManyField(Dept, through='system.userpost')
|
depts = models.ManyToManyField(Dept, through='system.userpost')
|
||||||
roles = models.ManyToManyField(Role, verbose_name='关联角色')
|
roles = models.ManyToManyField(Role, verbose_name='关联角色', blank=True)
|
||||||
|
|
||||||
# 关联账号
|
# 关联账号
|
||||||
secret = models.CharField('密钥', max_length=100, null=True, blank=True)
|
secret = models.CharField('密钥', max_length=100, null=True, blank=True)
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ from rest_framework.decorators import action
|
||||||
from apps.utils.serializers import ComplexSerializer
|
from apps.utils.serializers import ComplexSerializer
|
||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
from django.core.files.uploadedfile import UploadedFile
|
||||||
|
|
||||||
# 实例化myLogger
|
# 实例化myLogger
|
||||||
myLogger = logging.getLogger('log')
|
myLogger = logging.getLogger('log')
|
||||||
|
|
@ -298,7 +299,10 @@ class ComplexQueryMixin:
|
||||||
page = self.paginate_queryset(new_qs)
|
page = self.paginate_queryset(new_qs)
|
||||||
if page is not None:
|
if page is not None:
|
||||||
serializer = self.get_serializer(page, many=True)
|
serializer = self.get_serializer(page, many=True)
|
||||||
return self.get_paginated_response(serializer.data)
|
rdata = serializer.data
|
||||||
|
if hasattr(self, 'add_info_for_list'):
|
||||||
|
rdata = self.add_info_for_list(rdata)
|
||||||
|
return self.get_paginated_response(rdata)
|
||||||
serializer = self.get_serializer(new_qs, many=True)
|
serializer = self.get_serializer(new_qs, many=True)
|
||||||
rdata = serializer.data
|
rdata = serializer.data
|
||||||
if hasattr(self, 'add_info_for_list'):
|
if hasattr(self, 'add_info_for_list'):
|
||||||
|
|
@ -494,6 +498,14 @@ class MyLoggingMixin(object):
|
||||||
if isinstance(data, list):
|
if isinstance(data, list):
|
||||||
return [self._clean_data(d) for d in data]
|
return [self._clean_data(d) for d in data]
|
||||||
|
|
||||||
|
# Uploaded files: convert to metadata so JSON serialization won't fail
|
||||||
|
if isinstance(data, UploadedFile):
|
||||||
|
return {
|
||||||
|
"filename": getattr(data, "name", None),
|
||||||
|
"content_type": getattr(data, "content_type", None),
|
||||||
|
"size": getattr(data, "size", None),
|
||||||
|
}
|
||||||
|
|
||||||
if isinstance(data, dict):
|
if isinstance(data, dict):
|
||||||
SENSITIVE_FIELDS = {
|
SENSITIVE_FIELDS = {
|
||||||
"api",
|
"api",
|
||||||
|
|
@ -511,12 +523,28 @@ class MyLoggingMixin(object):
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, value in data.items():
|
for key, value in data.items():
|
||||||
|
# convert uploaded files in dict values
|
||||||
|
if isinstance(value, UploadedFile):
|
||||||
|
data[key] = {
|
||||||
|
"filename": getattr(value, "name", None),
|
||||||
|
"content_type": getattr(value, "content_type", None),
|
||||||
|
"size": getattr(value, "size", None),
|
||||||
|
}
|
||||||
|
continue
|
||||||
try:
|
try:
|
||||||
value = ast.literal_eval(value)
|
value = ast.literal_eval(value)
|
||||||
except (ValueError, SyntaxError):
|
except (ValueError, SyntaxError, TypeError):
|
||||||
pass
|
pass
|
||||||
if isinstance(value, (list, dict)):
|
if isinstance(value, (list, dict)):
|
||||||
data[key] = self._clean_data(value)
|
data[key] = self._clean_data(value)
|
||||||
if key.lower() in SENSITIVE_FIELDS:
|
if key.lower() in SENSITIVE_FIELDS:
|
||||||
data[key] = self.CLEANED_SUBSTITUTE
|
data[key] = self.CLEANED_SUBSTITUTE
|
||||||
|
# Fallback: ensure returned data is JSON-serializable by converting
|
||||||
|
# unknown object types to strings
|
||||||
|
if not isinstance(data, (dict, list, str, int, float, bool, type(None))):
|
||||||
|
try:
|
||||||
|
return str(data)
|
||||||
|
except Exception:
|
||||||
|
return None
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
from server.settings import get_sysconfig
|
from server.settings import get_sysconfig
|
||||||
|
|
|
||||||
|
|
@ -8,13 +8,17 @@ https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import django
|
||||||
from channels.routing import ProtocolTypeRouter, URLRouter
|
from channels.routing import ProtocolTypeRouter, URLRouter
|
||||||
|
|
||||||
|
# This is needed for Django to work properly.
|
||||||
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings')
|
||||||
|
django.setup()
|
||||||
|
|
||||||
from django.core.asgi import get_asgi_application
|
from django.core.asgi import get_asgi_application
|
||||||
from apps.utils.middlewares import TokenAuthMiddleware
|
from apps.utils.middlewares import TokenAuthMiddleware
|
||||||
import apps.ws.routing
|
import apps.ws.routing
|
||||||
|
|
||||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings')
|
|
||||||
|
|
||||||
application = ProtocolTypeRouter({
|
application = ProtocolTypeRouter({
|
||||||
"http": get_asgi_application(),
|
"http": get_asgi_application(),
|
||||||
"websocket": TokenAuthMiddleware(
|
"websocket": TokenAuthMiddleware(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue