增加tdevice 字符长度
This commit is contained in:
parent
a623a006fb
commit
bdf4445497
|
@ -13,6 +13,8 @@ class AreaSimpleSerializer(CustomModelSerializer):
|
||||||
|
|
||||||
|
|
||||||
class AreaSerializer(CustomModelSerializer):
|
class AreaSerializer(CustomModelSerializer):
|
||||||
|
manager_name = serializers.CharField(source='manager.name', read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Area
|
model = Area
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
@ -23,7 +25,7 @@ class AreaCreateUpdateSerializer(CustomModelSerializer):
|
||||||
model = Area
|
model = Area
|
||||||
fields = ['name', 'level', 'number', 'visitor_yes', 'remployee_yes', 'employee_yes',
|
fields = ['name', 'level', 'number', 'visitor_yes', 'remployee_yes', 'employee_yes',
|
||||||
'belong_dept', 'count_people_min', 'count_people_max', 'count_people', 'cate',
|
'belong_dept', 'count_people_min', 'count_people_max', 'count_people', 'cate',
|
||||||
'stay_minute_min', 'stay_minute_max']
|
'stay_minute_min', 'stay_minute_max', 'manager']
|
||||||
|
|
||||||
|
|
||||||
class AccessCreateSerializer(CustomModelSerializer):
|
class AccessCreateSerializer(CustomModelSerializer):
|
||||||
|
|
|
@ -23,6 +23,7 @@ class EventCate(CommonAModel):
|
||||||
speakers = models.ManyToManyField(TDevice, verbose_name='固定音响', blank=True)
|
speakers = models.ManyToManyField(TDevice, verbose_name='固定音响', blank=True)
|
||||||
filter_area_level = models.PositiveSmallIntegerField('固定音响区域级别过滤', choices=Area.AREA_LEVEL_CHOICES,
|
filter_area_level = models.PositiveSmallIntegerField('固定音响区域级别过滤', choices=Area.AREA_LEVEL_CHOICES,
|
||||||
default=Area.AREA_1)
|
default=Area.AREA_1)
|
||||||
|
hanle_minute = models.PositiveSmallIntegerField('处理时间', default=0, help_text='超过处理时间事件状态变为超时未处理,0代表未配置')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
@ -57,7 +58,11 @@ class Event(CommonBModel):
|
||||||
"""
|
"""
|
||||||
事件
|
事件
|
||||||
"""
|
"""
|
||||||
cates = models.ForeignKey(EventCate, verbose_name='事件种类', on_delete=models.CASCADE)
|
EVENT_MARK_CHOICES = (
|
||||||
|
(10, '正常'),
|
||||||
|
(20, '误报'),
|
||||||
|
)
|
||||||
|
cates = models.ManyToManyField(EventCate, verbose_name='关联事件种类', through='ecm.eventdo')
|
||||||
imgs = models.ManyToManyField(File, verbose_name='事件图片', blank=True)
|
imgs = models.ManyToManyField(File, verbose_name='事件图片', blank=True)
|
||||||
area = models.ForeignKey(Area, verbose_name='发生区域', on_delete=models.CASCADE)
|
area = models.ForeignKey(Area, verbose_name='发生区域', on_delete=models.CASCADE)
|
||||||
location = models.JSONField('事件点位坐标', default=dict, null=False, blank=True)
|
location = models.JSONField('事件点位坐标', default=dict, null=False, blank=True)
|
||||||
|
@ -65,6 +70,9 @@ class Event(CommonBModel):
|
||||||
max_length=20, null=True, blank=True)
|
max_length=20, null=True, blank=True)
|
||||||
people = models.ForeignKey(Employee, verbose_name='当事人',
|
people = models.ForeignKey(Employee, verbose_name='当事人',
|
||||||
on_delete=models.CASCADE, null=True, blank=True)
|
on_delete=models.CASCADE, null=True, blank=True)
|
||||||
|
state = models.PositiveSmallIntegerField('事件状态', default=10)
|
||||||
|
msg = models.TextField('事件文本', null=True, blank=True)
|
||||||
|
mark = models.PositiveSmallIntegerField('事件标记', default=10)
|
||||||
handle_time = models.DateTimeField('处理时间', null=True, blank=True)
|
handle_time = models.DateTimeField('处理时间', null=True, blank=True)
|
||||||
handle_user = models.ForeignKey(User, verbose_name='处理人',
|
handle_user = models.ForeignKey(User, verbose_name='处理人',
|
||||||
on_delete=models.CASCADE, null=True, blank=True)
|
on_delete=models.CASCADE, null=True, blank=True)
|
||||||
|
@ -72,7 +80,15 @@ class Event(CommonBModel):
|
||||||
is_pushed = models.BooleanField('是否已推送', default=False)
|
is_pushed = models.BooleanField('是否已推送', default=False)
|
||||||
|
|
||||||
|
|
||||||
# class
|
class Eventdo(models.Model):
|
||||||
|
cate = models.ForeignKey(EventCate, verbose_name='关联事件种类',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
|
event = models.ForeignKey(Event, verbose_name='关联事件',
|
||||||
|
on_delete=models.CASCADE)
|
||||||
|
handle_time = models.DateTimeField('处理时间', null=True, blank=True)
|
||||||
|
handle_user = models.ForeignKey(User, verbose_name='处理人',
|
||||||
|
on_delete=models.CASCADE, null=True, blank=True)
|
||||||
|
handle_desc = models.TextField('处理描述', null=True, blank=True)
|
||||||
|
|
||||||
|
|
||||||
class Remind(BaseModel):
|
class Remind(BaseModel):
|
||||||
|
@ -84,11 +100,11 @@ class Remind(BaseModel):
|
||||||
recipient = models.ForeignKey(User, verbose_name='接收人',
|
recipient = models.ForeignKey(User, verbose_name='接收人',
|
||||||
on_delete=models.CASCADE)
|
on_delete=models.CASCADE)
|
||||||
notify_setting = models.ForeignKey(NotifySetting, verbose_name='通过哪个配置',
|
notify_setting = models.ForeignKey(NotifySetting, verbose_name='通过哪个配置',
|
||||||
on_delete=models.CASCADE, null=True, blank=True)
|
on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
post = models.ForeignKey(Post, verbose_name='岗位',
|
post = models.ForeignKey(Post, verbose_name='岗位',
|
||||||
on_delete=models.CASCADE, null=True, blank=True)
|
on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
dept = models.ForeignKey(Dept, verbose_name='部门',
|
dept = models.ForeignKey(Dept, verbose_name='部门',
|
||||||
on_delete=models.CASCADE, null=True, blank=True)
|
on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
msg = models.TextField('推送文本', null=True, blank=True)
|
msg = models.TextField('推送文本', null=True, blank=True)
|
||||||
is_read = models.BooleanField('站内信已读', default=False)
|
is_read = models.BooleanField('站内信已读', default=False)
|
||||||
can_handle = models.BooleanField('是否可处理', default=False)
|
can_handle = models.BooleanField('是否可处理', default=False)
|
||||||
|
|
|
@ -89,7 +89,7 @@ class EcmService:
|
||||||
if area and blts and blts.employee: # 如果是人
|
if area and blts and blts.employee: # 如果是人
|
||||||
if area.type == Area.AREA_TYPE_FIX:
|
if area.type == Area.AREA_TYPE_FIX:
|
||||||
# 更新人员位置信息缓存
|
# 更新人员位置信息缓存
|
||||||
key_str = f'ep_{blts.employee.id}'
|
key_str = 'ep_{}'.format(blts.employee.id)
|
||||||
ep_loc_dict = cache.get_or_set(
|
ep_loc_dict = cache.get_or_set(
|
||||||
key_str, cls.ep_default_dict, timeout=None
|
key_str, cls.ep_default_dict, timeout=None
|
||||||
)
|
)
|
||||||
|
@ -164,7 +164,7 @@ class EcmService:
|
||||||
if blts.employee:
|
if blts.employee:
|
||||||
# 从缓存查询人员位置信息
|
# 从缓存查询人员位置信息
|
||||||
time2 = int(time.time())
|
time2 = int(time.time())
|
||||||
key_str = f'ep_{blts.employee.id}'
|
key_str = 'ep_{}'.format(blts.employee.id)
|
||||||
ep_loc_dict = cache.get_or_set(
|
ep_loc_dict = cache.get_or_set(
|
||||||
key_str, cls.ep_default_dict, timeout=None
|
key_str, cls.ep_default_dict, timeout=None
|
||||||
)
|
)
|
||||||
|
|
|
@ -117,3 +117,8 @@ class DhClient:
|
||||||
"response_ms": self._get_response_ms()
|
"response_ms": self._get_response_ms()
|
||||||
})
|
})
|
||||||
Tlog(**self.log).save()
|
Tlog(**self.log).save()
|
||||||
|
|
||||||
|
def get_full_pic(self, path: str):
|
||||||
|
"""返回完整访问地址
|
||||||
|
"""
|
||||||
|
return '{}/evo-apigw/evo-oss/{}?token={}'.format(settings.DAHUA_BASE_URL, path, self.token)
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.2.12 on 2022-06-30 10:26
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('third', '0004_auto_20220630_1025'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='tdevice',
|
||||||
|
name='code',
|
||||||
|
field=models.CharField(db_index=True, max_length=50, verbose_name='设备唯一标识'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -32,7 +32,7 @@ class TDevice(BaseModel):
|
||||||
(DEVICE_PANEL, '面板机')
|
(DEVICE_PANEL, '面板机')
|
||||||
)
|
)
|
||||||
type = models.PositiveSmallIntegerField('设备类型', choices=DEVICE_CHOICE)
|
type = models.PositiveSmallIntegerField('设备类型', choices=DEVICE_CHOICE)
|
||||||
code = models.CharField('设备唯一标识', max_length=20, db_index=True)
|
code = models.CharField('设备唯一标识', max_length=50, db_index=True)
|
||||||
location = models.JSONField('位置信息', default=dict,
|
location = models.JSONField('位置信息', default=dict,
|
||||||
null=False, blank=True)
|
null=False, blank=True)
|
||||||
area = models.ForeignKey(Area, on_delete=models.CASCADE,
|
area = models.ForeignKey(Area, on_delete=models.CASCADE,
|
||||||
|
|
|
@ -5,6 +5,10 @@ from apps.third.models import TDevice
|
||||||
from apps.utils.serializers import CustomModelSerializer
|
from apps.utils.serializers import CustomModelSerializer
|
||||||
|
|
||||||
|
|
||||||
|
class PicSerializer(serializers.Serializer):
|
||||||
|
path = serializers.CharField(label='图片oss地址')
|
||||||
|
|
||||||
|
|
||||||
class TDeviceSerializer(CustomModelSerializer):
|
class TDeviceSerializer(CustomModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = TDevice
|
model = TDevice
|
||||||
|
|
|
@ -87,6 +87,10 @@ dhapis = {
|
||||||
"video_realtime": {
|
"video_realtime": {
|
||||||
"url": "/evo-apigw/admin/API/video/stream/realtime",
|
"url": "/evo-apigw/admin/API/video/stream/realtime",
|
||||||
"method": "post"
|
"method": "post"
|
||||||
|
},
|
||||||
|
"alarm_detail": {
|
||||||
|
"url": "/evo-apigw/evo-event/1.2.0/alarm-record/detail?alarmCode={alarmCode}&dbType={dbType}&alarmDate={alarmDate}",
|
||||||
|
"method": "get"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,5 +128,9 @@ spapis = {
|
||||||
"device_list": {
|
"device_list": {
|
||||||
"url": "/api/devices",
|
"url": "/api/devices",
|
||||||
"method": "get"
|
"method": "get"
|
||||||
|
},
|
||||||
|
"send_to_device": {
|
||||||
|
"url": "/api/sendtodevice",
|
||||||
|
"method": "post"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ from apps.utils.viewsets import CustomGenericViewSet
|
||||||
from rest_framework.mixins import CreateModelMixin
|
from rest_framework.mixins import CreateModelMixin
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
|
|
||||||
from apps.third.serializers import RequestCommonSerializer
|
from apps.third.serializers import PicSerializer, RequestCommonSerializer
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
import stomp
|
import stomp
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
@ -121,6 +121,15 @@ class XxCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
||||||
"""
|
"""
|
||||||
return Response(xxapis)
|
return Response(xxapis)
|
||||||
|
|
||||||
|
@action(methods=['get'], detail=False,
|
||||||
|
permission_classes=[IsAuthenticated])
|
||||||
|
def token(self, request, pk=None):
|
||||||
|
"""获取token
|
||||||
|
|
||||||
|
获取token
|
||||||
|
"""
|
||||||
|
return Response({'token': xxClient.token})
|
||||||
|
|
||||||
|
|
||||||
class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
||||||
perms_map = {'post': '*'}
|
perms_map = {'post': '*'}
|
||||||
|
@ -157,6 +166,25 @@ class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
||||||
"""
|
"""
|
||||||
return Response(dhapis)
|
return Response(dhapis)
|
||||||
|
|
||||||
|
@action(methods=['get'], detail=False,
|
||||||
|
permission_classes=[IsAuthenticated])
|
||||||
|
def token(self, request, pk=None):
|
||||||
|
"""获取token
|
||||||
|
|
||||||
|
获取token
|
||||||
|
"""
|
||||||
|
return Response({'token': dhClient.token})
|
||||||
|
|
||||||
|
@action(methods=['post'], detail=False,
|
||||||
|
permission_classes=[IsAuthenticated],
|
||||||
|
serializer_class=PicSerializer)
|
||||||
|
def full_pic(self, request, pk=None):
|
||||||
|
"""获取完整图片地址
|
||||||
|
|
||||||
|
获取完整图片地址
|
||||||
|
"""
|
||||||
|
return Response({'url': dhClient.get_full_pic(path=request.data.get('path'))})
|
||||||
|
|
||||||
@action(methods=['post'], detail=False,
|
@action(methods=['post'], detail=False,
|
||||||
permission_classes=[IsAdminUser],
|
permission_classes=[IsAdminUser],
|
||||||
serializer_class=serializers.Serializer)
|
serializer_class=serializers.Serializer)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import django.utils.timezone as timezone
|
import django.utils.timezone as timezone
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models.query import QuerySet
|
from django.db.models.query import QuerySet
|
||||||
|
from yaml import serialize
|
||||||
from apps.utils.snowflake import idWorker
|
from apps.utils.snowflake import idWorker
|
||||||
|
|
||||||
# 自定义软删除查询基类
|
# 自定义软删除查询基类
|
||||||
|
@ -157,3 +158,10 @@ class CommonBDModel(BaseModel):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
|
|
||||||
|
# class Smslog(BaseModel):
|
||||||
|
# """
|
||||||
|
# 短信发送记录表
|
||||||
|
# """
|
||||||
|
# phone = models.CharField('号码')
|
||||||
|
|
|
@ -17,6 +17,7 @@ class CustomModelSerializer(DynamicFieldsMixin, serializers.ModelSerializer):
|
||||||
"""
|
"""
|
||||||
自定义serializer/包含创建和新增字段处理
|
自定义serializer/包含创建和新增字段处理
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, instance=None, data=empty, request=None, **kwargs):
|
def __init__(self, instance=None, data=empty, request=None, **kwargs):
|
||||||
super().__init__(instance, data, **kwargs)
|
super().__init__(instance, data, **kwargs)
|
||||||
self.request: Request = request or self.context.get('request', None)
|
self.request: Request = request or self.context.get('request', None)
|
||||||
|
@ -38,3 +39,9 @@ class CustomModelSerializer(DynamicFieldsMixin, serializers.ModelSerializer):
|
||||||
if hasattr(instance, 'update_by'):
|
if hasattr(instance, 'update_by'):
|
||||||
validated_data['update_by'] = getattr(self.request, 'user', None)
|
validated_data['update_by'] = getattr(self.request, 'user', None)
|
||||||
return super().update(instance, validated_data)
|
return super().update(instance, validated_data)
|
||||||
|
|
||||||
|
|
||||||
|
class SendSmsSerializer(serializers.Serializer):
|
||||||
|
phone = serializers.CharField(label='手机号')
|
||||||
|
template_code = serializers.CharField(label='模板标识')
|
||||||
|
template_param = serializers.JSONField(label='模板参数')
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
from aliyunsdkcore.client import AcsClient
|
||||||
|
from aliyunsdkcore.request import CommonRequest
|
||||||
|
from django.conf import settings
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
def send_sms(phone: str, template_code: str, template_param: dict):
|
||||||
|
client = AcsClient(settings.XNIU_SMS_KEY, settings.XNIU_SMS_SECRET, 'default')
|
||||||
|
request = CommonRequest()
|
||||||
|
# 固定json
|
||||||
|
request.set_accept_format('json')
|
||||||
|
# 固定地址
|
||||||
|
request.set_domain('sms11.hzgxr.com:40081')
|
||||||
|
# 固定POST
|
||||||
|
request.set_method('POST')
|
||||||
|
# 固定HTTP
|
||||||
|
request.set_protocol_type('http') # https | http
|
||||||
|
# 固定版本号
|
||||||
|
request.set_version('2017-05-25')
|
||||||
|
# 固定操作名
|
||||||
|
request.set_action_name('SendSms')
|
||||||
|
# 手机号码
|
||||||
|
request.add_query_param('PhoneNumbers', phone)
|
||||||
|
# 签名名称
|
||||||
|
request.add_query_param('SignName', "国家建材网")
|
||||||
|
# 模板CODE
|
||||||
|
request.add_query_param('TemplateCode', template_code)
|
||||||
|
# 如果有模板参数 填写模板参数 如果无 无须填写
|
||||||
|
request.add_query_param('TemplateParam', json.dumps(template_param))
|
||||||
|
res = client.do_action(request)
|
||||||
|
res_dict = json.loads(str(res, encoding='utf-8'))
|
||||||
|
if res_dict['result'] == 0:
|
||||||
|
return True, 'OK', res_dict['BizId']
|
||||||
|
else:
|
||||||
|
return False, res_dict['Message'], res_dict['BizId']
|
|
@ -0,0 +1,6 @@
|
||||||
|
from aip import AipSpeech
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
def generate_voice(msg:str):
|
||||||
|
client = AipSpeech(settings.BD_SP_ID, settings.BD_SP_KEY, settings.BD_SP_SECRET)
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
from rest_framework import routers
|
from rest_framework import routers
|
||||||
from apps.utils.views import SignatureViewSet
|
from apps.utils.views import SignatureViewSet, TestViewSet
|
||||||
API_BASE_URL = 'api/utils/'
|
API_BASE_URL = 'api/utils/'
|
||||||
|
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
router.register('signature', SignatureViewSet, basename='signature')
|
router.register('signature', SignatureViewSet, basename='signature')
|
||||||
|
router.register('test', TestViewSet, basename='util_test')
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path(API_BASE_URL, include(router.urls)),
|
path(API_BASE_URL, include(router.urls)),
|
||||||
|
|
|
@ -2,15 +2,18 @@
|
||||||
import os
|
import os
|
||||||
import cv2
|
import cv2
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
|
from yaml import serialize
|
||||||
from apps.utils.errors import SIGN_MAKE_FAIL
|
from apps.utils.errors import SIGN_MAKE_FAIL
|
||||||
|
from apps.utils.sms import send_sms
|
||||||
from server.settings import BASE_DIR
|
from server.settings import BASE_DIR
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.exceptions import ParseError
|
from rest_framework.exceptions import ParseError
|
||||||
from apps.utils.viewsets import CustomGenericViewSet
|
from apps.utils.viewsets import CustomGenericViewSet
|
||||||
from apps.utils.mixins import CustomCreateModelMixin
|
from apps.utils.mixins import CustomCreateModelMixin
|
||||||
from apps.utils.serializers import GenSignatureSerializer
|
from apps.utils.serializers import GenSignatureSerializer, SendSmsSerializer
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
from rest_framework.decorators import action
|
||||||
|
|
||||||
|
|
||||||
class SignatureViewSet(CustomCreateModelMixin, CustomGenericViewSet):
|
class SignatureViewSet(CustomCreateModelMixin, CustomGenericViewSet):
|
||||||
|
@ -52,7 +55,18 @@ class SignatureViewSet(CustomCreateModelMixin, CustomGenericViewSet):
|
||||||
raise ParseError(**SIGN_MAKE_FAIL)
|
raise ParseError(**SIGN_MAKE_FAIL)
|
||||||
|
|
||||||
|
|
||||||
def map_config(request):
|
class TestViewSet(CustomGenericViewSet):
|
||||||
path = os.path.join(BASE_DIR, 'dist/data/map/0000/mapConfig.conf')
|
authentication_classes = ()
|
||||||
with open(path) as f:
|
permission_classes = ()
|
||||||
return HttpResponse(f.read(), content_type='application/octet-stream')
|
|
||||||
|
@action(methods=['post'], detail=False, serializer_class=SendSmsSerializer)
|
||||||
|
def send_sms(self, request, pk=None):
|
||||||
|
"""发送短信测试
|
||||||
|
|
||||||
|
发送短信测试
|
||||||
|
"""
|
||||||
|
serializer = SendSmsSerializer(data=request.data)
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
|
vdata = serializer.validated_data
|
||||||
|
res = send_sms(**vdata)
|
||||||
|
return Response(res)
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -20,3 +20,5 @@ channels-redis==3.4.0
|
||||||
django-restql==0.15.2
|
django-restql==0.15.2
|
||||||
stomp.py==8.0.0
|
stomp.py==8.0.0
|
||||||
shapely==1.8.2
|
shapely==1.8.2
|
||||||
|
aliyun-python-sdk-core==2.13.36
|
||||||
|
baidu-aip==4.16.6
|
||||||
|
|
|
@ -380,3 +380,14 @@ SP_PASSWORD = conf.SP_PASSWORD
|
||||||
SD_PWD = conf.SD_PWD
|
SD_PWD = conf.SD_PWD
|
||||||
BACKUP_PATH = conf.BACKUP_PATH
|
BACKUP_PATH = conf.BACKUP_PATH
|
||||||
SH_PATH = conf.SH_PATH
|
SH_PATH = conf.SH_PATH
|
||||||
|
|
||||||
|
|
||||||
|
# 小牛短信
|
||||||
|
XNIU_SMS_KEY = conf.XNIU_SMS_KEY
|
||||||
|
XNIU_SMS_SECRET = conf.XNIU_SMS_SECRET
|
||||||
|
|
||||||
|
|
||||||
|
# 百度语音
|
||||||
|
BD_SP_ID = conf.BD_SP_ID
|
||||||
|
BD_SP_KEY = conf.BD_SP_KEY
|
||||||
|
BD_SP_SECRET = conf.BD_SP_SECRET
|
||||||
|
|
|
@ -21,7 +21,6 @@ from drf_yasg import openapi
|
||||||
from drf_yasg.views import get_schema_view
|
from drf_yasg.views import get_schema_view
|
||||||
from rest_framework.documentation import include_docs_urls
|
from rest_framework.documentation import include_docs_urls
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
from apps.utils.views import map_config
|
|
||||||
|
|
||||||
schema_view = get_schema_view(
|
schema_view = get_schema_view(
|
||||||
openapi.Info(
|
openapi.Info(
|
||||||
|
|
Loading…
Reference in New Issue