diff --git a/client/.env.development b/client/.env.development index e00224e..f6c64bf 100644 --- a/client/.env.development +++ b/client/.env.development @@ -3,8 +3,8 @@ ENV = 'development' # base api #VUE_APP_BASE_API = 'http://10.0.11.127:8000/api' -# VUE_APP_BASE_API = 'http://127.0.0.1:2222/api' -VUE_APP_BASE_API = 'https://testsearch.ctc.ac.cn/api' +VUE_APP_BASE_API = 'http://127.0.0.1:2222/api' +# VUE_APP_BASE_API = 'https://testsearch.ctc.ac.cn/api' #VUE_APP_BASE_API = 'http://47.95.0.242:9101/api' diff --git a/client/package.json b/client/package.json index 74a5bc8..37ee37a 100644 --- a/client/package.json +++ b/client/package.json @@ -26,7 +26,7 @@ "normalize.css": "7.0.0", "nprogress": "0.2.0", "path-to-regexp": "2.4.0", - "pdfobject": "^2.2.12", + "pdfobject": "^2.3.0", "vod-js-sdk-v6": "^1.4.12", "vue": "2.6.10", "vue-pdf": "^4.2.0", diff --git a/client/src/api/record.js b/client/src/api/record.js index abf1667..d6b231f 100644 --- a/client/src/api/record.js +++ b/client/src/api/record.js @@ -85,3 +85,11 @@ export function deptconfirm(id) { }) } +export function deptconfirm_top(id) { + return request({ + url: `/supervision/record/${id}/deptconfirm_top/`, + method: 'put', + }) +} + + diff --git a/client/src/router/index.js b/client/src/router/index.js index f9a435c..5d92762 100644 --- a/client/src/router/index.js +++ b/client/src/router/index.js @@ -254,7 +254,7 @@ export const asyncRoutes = [ path: 'other', name: 'other', component: () => import('@/views/supervision/task.vue'), - meta: { title: '其他任务'} + meta: { title: '其他任务', perms: ['task2']} }, ] }, @@ -289,7 +289,7 @@ export const asyncRoutes = [ path: 'taskdo/:id', name: 'Taskdo', component: () => import('@/views/supervision/taskdo.vue'), - meta: { title: '报送任务执行', perms: ['task_view'] }, + meta: { title: '报送任务执行', perms: ['task2'] }, hidden: true }, { diff --git a/client/src/views/supervision/mytaskrecord.vue b/client/src/views/supervision/mytaskrecord.vue index d8f7e17..0692b05 100644 --- a/client/src/views/supervision/mytaskrecord.vue +++ b/client/src/views/supervision/mytaskrecord.vue @@ -50,6 +50,12 @@ 未确认 + + + + + + + + + diff --git a/client/src/views/supervisionNew/mytask.vue b/client/src/views/supervisionNew/mytask.vue index cf9b91e..60956b3 100644 --- a/client/src/views/supervisionNew/mytask.vue +++ b/client/src/views/supervisionNew/mytask.vue @@ -1036,7 +1036,7 @@ }, getPtList(){ let that = this; - getPtList({task2do:that.task2do,page:0}).then((res) => { + getPtList({task2do__task2__year:that.task2Item.task2_.year,page:0}).then((res) => { if (res.code >= 200) { that.ptList=res.data; } @@ -1060,7 +1060,7 @@ }, getOinspectList(){ let that = this; - getOinspectList({task2do:that.task2do,page:0}).then((res) => { + getOinspectList({task2do__task2__year:that.task2Item.task2_.year,page:0}).then((res) => { if (res.code >= 200) { that.oinspectList=res.data; } diff --git a/server/apps/information/__init__.py b/server/apps/information/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/server/apps/information/admin.py b/server/apps/information/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/server/apps/information/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/server/apps/information/apps.py b/server/apps/information/apps.py new file mode 100644 index 0000000..339005f --- /dev/null +++ b/server/apps/information/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class InformationConfig(AppConfig): + name = 'information' diff --git a/server/apps/information/migrations/0001_initial.py b/server/apps/information/migrations/0001_initial.py new file mode 100644 index 0000000..97f2e21 --- /dev/null +++ b/server/apps/information/migrations/0001_initial.py @@ -0,0 +1,105 @@ +# Generated by Django 3.2.12 on 2024-03-19 08:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='AbilityReview', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=20, unique=True, verbose_name='公司名称')), + ('qualification_name', models.CharField(max_length=20, verbose_name='资质名称')), + ('judging_method', models.CharField(choices=[('文审', '文审'), ('现场', '现场')], max_length=20, verbose_name='评审方法')), + ('judging_type', models.CharField(choices=[('初次', '初次'), ('扩项', '扩项'), ('变更', '变更'), ('复评', '复评'), ('迁址', '迁址')], max_length=20, verbose_name='评审类型')), + ('add_param', models.IntegerField(default=0, verbose_name='新增参数')), + ('review_date', models.DateField(null=True, verbose_name='评审日期')), + ('now_count', models.IntegerField(default=0, verbose_name='现有场所数量')), + ('add_count', models.IntegerField(default=0, verbose_name='新增场所数量')), + ], + options={ + 'verbose_name': '评审情况', + 'db_table': 'ability_review', + }, + ), + migrations.CreateModel( + name='Contact', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=20, unique=True, verbose_name='姓名')), + ('address', models.CharField(max_length=100, verbose_name='地址')), + ('header', models.CharField(max_length=20, verbose_name='负责人')), + ('tel', models.CharField(max_length=20, verbose_name='负责人电话')), + ('email', models.CharField(max_length=50, null=True, verbose_name='负责人邮箱')), + ('head_technology', models.CharField(max_length=50, verbose_name='技术负责人')), + ('tel_technology', models.CharField(max_length=20, verbose_name='技术负责人电话')), + ('email_technology', models.CharField(max_length=50, null=True, verbose_name='技术负责人邮箱')), + ('head_quality', models.CharField(max_length=50, verbose_name='质量负责人')), + ('tel_quality', models.CharField(max_length=20, verbose_name='质量负责人电话')), + ('email_quality', models.CharField(max_length=50, null=True, verbose_name='质量负责人邮箱')), + ], + options={ + 'verbose_name': '实验室联系方式', + 'db_table': 'contact', + }, + ), + migrations.CreateModel( + name='ExternalAuditors', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name_company', models.CharField(max_length=20, unique=True, verbose_name='公司名称')), + ('name', models.CharField(max_length=20, verbose_name='姓名')), + ('review_type', models.CharField(max_length=20, verbose_name='评审类型')), + ('certificate_expiration', models.DateField(verbose_name='证书有效期')), + ('contact', models.CharField(max_length=20, verbose_name='联系方式')), + ('judging_areas', models.CharField(max_length=20, verbose_name='评审领域')), + ('remark', models.CharField(max_length=20, null=True, verbose_name='备注')), + ], + options={ + 'verbose_name': '外审员情况', + 'db_table': 'externalauditors', + }, + ), + migrations.CreateModel( + name='QualityActivities', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=20, unique=True, verbose_name='活动名称')), + ('roles', models.CharField(choices=[('组织方', '组织方'), ('活动方', '活动方')], max_length=20, verbose_name='参与角色')), + ('collaborators', models.CharField(max_length=20, verbose_name='合作方')), + ('organizational_units', models.CharField(max_length=20, verbose_name='组织单位')), + ('place', models.CharField(max_length=50, verbose_name='活动地点')), + ('time', models.DateField(null=True, verbose_name='活动时间')), + ('participations', models.IntegerField(verbose_name='活动参与单位数量')), + ('function', models.CharField(max_length=100, verbose_name='活动中发挥的作用')), + ('earnings', models.IntegerField(verbose_name='活动收益')), + ], + options={ + 'verbose_name': '质量活动', + 'db_table': 'quality_activities', + }, + ), + migrations.CreateModel( + name='QualityCommendation', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=20, unique=True, verbose_name='项目名称')), + ('commendation_name', models.CharField(max_length=20, verbose_name='表彰名称')), + ('Awards_level', models.CharField(max_length=20, verbose_name='获奖等级')), + ('awardee_company', models.CharField(max_length=20, verbose_name='获奖单位')), + ('awarded_by', models.CharField(max_length=20, verbose_name='颁奖单位')), + ('awarded_date', models.DateField(null=True, verbose_name='获奖日期')), + ], + options={ + 'verbose_name': '质量表彰', + 'db_table': 'quality_commendation', + }, + ), + ] diff --git a/server/apps/information/migrations/__init__.py b/server/apps/information/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/server/apps/information/models.py b/server/apps/information/models.py new file mode 100644 index 0000000..4b00d12 --- /dev/null +++ b/server/apps/information/models.py @@ -0,0 +1,106 @@ +from django.db import models + +# Create your models here. + +class AbilityReview(models.Model): + type_method = ( + ('文审', '文审'), + ('现场', '现场')) + + juge_type = ( ('初次', '初次'), + ('扩项', '扩项'), + ('变更', '变更'), + ('复评', '复评'), + ('迁址', '迁址')) + name = models.CharField(max_length=20, unique=True, verbose_name='公司名称') + qualification_name = models.CharField(max_length=20, verbose_name='资质名称') + judging_method = models.CharField(max_length=20, choices=type_method, verbose_name='评审方法') + judging_type = models.CharField(max_length=20, choices=juge_type, verbose_name='评审类型') + add_param = models.IntegerField(default=0, verbose_name='新增参数') + review_date = models.DateField(verbose_name='评审日期', null=True) + now_count = models.IntegerField(default=0, verbose_name='现有场所数量') + add_count = models.IntegerField(default=0, verbose_name='新增场所数量') + + class Meta: + verbose_name = '评审情况' + db_table = 'ability_review' + + def __str__(self): + return self.name + + +class QualityCommendation(models.Model): + name = models.CharField(max_length=20, unique=True, verbose_name='项目名称') + commendation_name = models.CharField(max_length=20, verbose_name='表彰名称') + Awards_level = models.CharField(max_length=20, verbose_name='获奖等级') + awardee_company = models.CharField(max_length=20, verbose_name='获奖单位') + awarded_by = models.CharField(max_length=20, verbose_name='颁奖单位') + awarded_date = models.DateField(verbose_name='获奖日期', null=True) + + class Meta: + verbose_name = '质量表彰' + db_table = 'quality_commendation' + + def __str__(self): + return self.name + + +class QualityActivities(models.Model): + role = (('组织方','组织方'),('活动方','活动方')) + name = models.CharField(max_length=20, unique=True, verbose_name='活动名称') + roles = models.CharField(max_length=20, choices=role, verbose_name='参与角色') + collaborators = models.CharField(max_length=20, verbose_name='合作方') + organizational_units = models.CharField(max_length=20, verbose_name='组织单位') + place = models.CharField(max_length=50, verbose_name='活动地点') + time = models.DateField(verbose_name='活动时间', null=True) + participations = models.IntegerField(verbose_name='活动参与单位数量') + function = models.CharField(max_length=100, verbose_name='活动中发挥的作用') + earnings = models.IntegerField(verbose_name='活动收益') + + class Meta: + verbose_name = '质量活动' + db_table = 'quality_activities' + + def __str__(self): + return self.name + + +class Contact(models.Model): + name = models.CharField(max_length=20, unique=True, verbose_name='姓名') + address = models.CharField(max_length=100, verbose_name='地址') + header = models.CharField(max_length=20, verbose_name='负责人') + tel = models.CharField(max_length=20, verbose_name='负责人电话') + email = models.CharField(max_length=50, verbose_name='负责人邮箱', null=True) + head_technology = models.CharField(max_length=50, verbose_name='技术负责人') + tel_technology = models.CharField(max_length=20, verbose_name='技术负责人电话') + email_technology = models.CharField(max_length=50, verbose_name='技术负责人邮箱', null=True) + head_quality = models.CharField(max_length=50, verbose_name='质量负责人') + tel_quality = models.CharField(max_length=20, verbose_name='质量负责人电话') + email_quality = models.CharField(max_length=50, verbose_name='质量负责人邮箱', null=True) + + class Meta: + verbose_name = '实验室联系方式' + db_table = 'contact' + + def __str__(self): + return self.name + + +class ExternalAuditors(models.Model): + review_type = ( ('CNAS', 'CNAS'), + ('CMA', 'CMA'), + ('DICA', 'DICA')) + name_company = models.CharField(max_length=20, unique=True, verbose_name='公司名称') + name = models.CharField(max_length=20, verbose_name='姓名') + review_type = models.CharField(max_length=20, verbose_name='评审类型') + certificate_expiration = models.DateField(verbose_name='证书有效期') + contact = models.CharField(max_length=20, verbose_name='联系方式') + judging_areas = models.CharField(max_length=20, verbose_name='评审领域') + remark = models.CharField(max_length=20, verbose_name='备注', null=True) + + class Meta: + verbose_name = '外审员情况' + db_table = 'externalauditors' + + def __str__(self): + return self.name \ No newline at end of file diff --git a/server/apps/information/serializers.py b/server/apps/information/serializers.py new file mode 100644 index 0000000..44bec81 --- /dev/null +++ b/server/apps/information/serializers.py @@ -0,0 +1,28 @@ +from rest_framework import serializers +from apps.information.models import AbilityReview, QualityCommendation, QualityActivities, Contact, ExternalAuditors + +class AbilityReviewSerializer(serializers.ModelSerializer): + model = AbilityReview + fields = '__all__' + + +class QualityCommendationSerializer(serializers.ModelSerializer): + model = QualityCommendation + fields = '__all__' + + +class QualityActivitiesSerializer(serializers.ModelSerializer): + model = QualityActivities + fields = '__all __' + + +class ContactSerializer(serializers.ModelSerializer): + model = Contact + fields = '__all__' + + +class ExternalAuditorsSerializer(serializers.ModelSerializer): + model = ExternalAuditors + fields = '__all__' + + diff --git a/server/apps/information/tests.py b/server/apps/information/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/server/apps/information/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/server/apps/information/url.py b/server/apps/information/url.py new file mode 100644 index 0000000..a6f5a1a --- /dev/null +++ b/server/apps/information/url.py @@ -0,0 +1,19 @@ +from django.urls import path, include +from rest_framework.routers import DefaultRouter +from .views import AbilityReviewViewSet, \ + QualityCommendationBViewSet, \ + QualityActivitiesViewSet,\ + ContactViewSet, \ + ExternalAuditorsViewSet + +API_BASE_URL = 'api/information/' + +router = DefaultRouter() +router.register(r'abilityreviews', AbilityReviewViewSet, basename='评审情况') +router.register(r'qualitycommendation', QualityCommendationBViewSet, basename='质量表彰') +router.register(r'qualityactivities', QualityActivitiesViewSet, basename='质量活动') +router.register(r'contact', ContactViewSet, basename='实验室联系方式') +router.register(r'externalauditors', ExternalAuditorsViewSet, basename='外审员情况') + + +urlpatterns = [path(API_BASE_URL, include(router.urls)),] \ No newline at end of file diff --git a/server/apps/information/views.py b/server/apps/information/views.py new file mode 100644 index 0000000..be88fe2 --- /dev/null +++ b/server/apps/information/views.py @@ -0,0 +1,58 @@ +from rest_framework import viewsets, mixins +from .models import AbilityReview, QualityCommendation, QualityActivities, Contact, ExternalAuditors +from .serializers import AbilityReviewSerializer, \ + QualityCommendationSerializer, \ + QualityActivitiesSerializer,\ + ContactSerializer, \ + ExternalAuditorsSerializer + + +class AbilityReviewViewSet( mixins.CreateModelMixin, + mixins.ListModelMixin, + mixins.DestroyModelMixin, + mixins.UpdateModelMixin, + viewsets.GenericViewSet): + queryset = AbilityReview.objects.all() + serializer_class = AbilityReviewSerializer + + #自定义查询 + def get_queryset(self): + pass + + +class QualityCommendationBViewSet(mixins.CreateModelMixin, + mixins.ListModelMixin, + mixins.DestroyModelMixin, + mixins.UpdateModelMixin, + viewsets.GenericViewSet): + queryset = QualityCommendation.objects.all() + serializer_class = QualityCommendationSerializer + + +class QualityActivitiesViewSet(mixins.CreateModelMixin, + mixins.ListModelMixin, + mixins.DestroyModelMixin, + mixins.UpdateModelMixin, + viewsets.GenericViewSet): + queryset = QualityActivities.objects.all() + serializer_class = QualityActivitiesSerializer + + +class ContactViewSet(mixins.CreateModelMixin, + mixins.ListModelMixin, + mixins.DestroyModelMixin, + mixins.UpdateModelMixin, + viewsets.GenericViewSet): + queryset = Contact.objects.all() + serializer_class = ContactSerializer + + +class ExternalAuditorsViewSet(mixins.CreateModelMixin, + mixins.ListModelMixin, + mixins.DestroyModelMixin, + mixins.UpdateModelMixin, + viewsets.GenericViewSet): + queryset = ExternalAuditors.objects.all() + serializer_class = ExternalAuditorsSerializer + + diff --git a/server/apps/supervision/migrations/0053_record_dept_top_yes.py b/server/apps/supervision/migrations/0053_record_dept_top_yes.py new file mode 100644 index 0000000..c3d1e74 --- /dev/null +++ b/server/apps/supervision/migrations/0053_record_dept_top_yes.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2024-03-22 02:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('supervision', '0052_task_cate'), + ] + + operations = [ + migrations.AddField( + model_name='record', + name='dept_top_yes', + field=models.BooleanField(default=True, verbose_name='事业部是否确认'), + ), + ] diff --git a/server/apps/supervision/models.py b/server/apps/supervision/models.py index 8ebb62c..ab8b1a7 100644 --- a/server/apps/supervision/models.py +++ b/server/apps/supervision/models.py @@ -85,6 +85,7 @@ class Record(CommonBModel): noteb = models.TextField('报送说明', null=True, blank=True) files = models.ManyToManyField(File, verbose_name="关联文件") dept_yes = models.BooleanField('二级单位是否确认', default=True) + dept_top_yes = models.BooleanField('事业部是否确认', default=True) class Meta: verbose_name = '报送记录' verbose_name_plural = verbose_name diff --git a/server/apps/supervision/views.py b/server/apps/supervision/views.py index 0f69e87..69e7e21 100644 --- a/server/apps/supervision/views.py +++ b/server/apps/supervision/views.py @@ -315,6 +315,8 @@ class RecordViewSet(RbacFilterSet, PageOrNot, CreateUpdateCustomMixin, ModelView obj.state = '已报送' if obj.belong_dept.type.name=='2级公司': obj.dept_yes = True + if obj.belong_dept.type.name=='事业部': + obj.dept_yes_top = True obj.up_user = request.user obj.up_date = timezone.now() obj.save() @@ -351,6 +353,17 @@ class RecordViewSet(RbacFilterSet, PageOrNot, CreateUpdateCustomMixin, ModelView obj.save() return Response(status=status.HTTP_200_OK) return Response('记录状态错误', status=status.HTTP_400_BAD_REQUEST) + @action(methods=['put'], detail=True, perms_map = {'put':'record_detconfirm_top'}) + def deptconfirm_top(self, request, *args, **kwargs): + """ + 事业部确认 + """ + obj = self.get_object() + if obj.state in ['已报送']: + obj.dept_top_yes = True + obj.save() + return Response(status=status.HTTP_200_OK) + return Response('记录状态错误', status=status.HTTP_400_BAD_REQUEST) @action(methods=['put'], detail=True, perms_map = {'put':'record_confirm'}) def confirm(self, request, *args, **kwargs): """ @@ -583,6 +596,11 @@ class Domixin: instance = serializer.save() self.countup_task2do(instance.task2do) + @transaction.atomic + def perform_update(self, serializer): + instance = serializer.save() + self.countup_task2do(instance.task2do) + @transaction.atomic def perform_destroy(self, instance): task2do = instance.task2do @@ -603,6 +621,13 @@ class PgoalDeptViewSet(Domixin, CreateUpdateCustomMixin, ModelViewSet): self.countup_task2do(instance.task2do) class ImpMixin: + def get_queryset(self): + mydept = self.request.user.dept + qs = super().get_queryset() + if has_permission('task2', self.request.user): + return qs + return qs.filter(belong_dept=mydept) + def format_date(self, ind, val): new_val = val if isinstance(val, datetime.datetime): @@ -626,10 +651,10 @@ class ImpMixin: return i[0] raise ParseError('第{}: 请选择固定选项值'.format(ind)) - def make_data(self, data, sheet, i, etype): + def F(self, data, sheet, i, etype): raise NotImplementedError() - def gen_imp_view(self, request, start: int, mySerializer, etype=0): + def gen_imp_view(self, request, start: int, mySerializer, etype=0, mymodel=None, repalce=None, types=None): sr = ImpSerializer(data=request.data) sr.is_valid(raise_exception=True) vdata = sr.validated_data @@ -646,6 +671,18 @@ class ImpMixin: data = {} data['task2do'] = task2do.id data = self.make_data(data, sheet, i, etype) + # 对于能力验证和监督检查进行有则跳过无则更新操作。 + if repalce: + if types.lower()== 'pt': + model_info = mymodel.objects.filter(name=data.get('name'), number=data.get('number')) + if model_info: + i = i + 1 + continue + elif types.lower() == 'oinspect': + model_info = mymodel.objects.filter(checker=data.get('checker'), date_inspect=data.get('date_inspect')) + if model_info: + i = i + 1 + continue datalist.append(data) i = i + 1 sr = mySerializer(data=datalist, many=True, context={'request': request}) @@ -744,6 +781,7 @@ class PtViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet): } filterset_fields = ['task2do', 'task2do__belong_dept', 'task2do__task2__year', 'task2do__task2'] + def make_data(self, data, sheet, i, etype): data['name'] = sheet['b'+str(i)].value data['number'] = sheet['c'+str(i)].value @@ -760,7 +798,7 @@ class PtViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet): 导入表格 """ - return self.gen_imp_view(request, 5, PtSerializer) + return self.gen_imp_view(request, 5, PtSerializer, 0, Pt, repalce=True, types='pt') class RiskViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet): @@ -810,4 +848,4 @@ class OinspectViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet): 导入表格 """ - return self.gen_imp_view(request, 5, OinspectSerializer) \ No newline at end of file + return self.gen_imp_view(request, 5, OinspectSerializer, 0, Oinspect, repalce=True, types="oinspect") \ No newline at end of file diff --git a/server/server/settings.py b/server/server/settings.py index aa87013..75a22ea 100644 --- a/server/server/settings.py +++ b/server/server/settings.py @@ -11,11 +11,13 @@ https://docs.djangoproject.com/en/3.0/ref/settings/ """ from datetime import datetime, timedelta -import os +import os, sys + + # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - +sys.path.insert(0, os.path.join(BASE_DIR, 'apps')) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/ @@ -23,6 +25,7 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'ez9z3a4m*$%srn9ve_t71yd!v+&xn9@0k(e(+l6#g1h=e5i4da' + # SECURITY WARNING: don't run with debug turned on in production! @@ -51,8 +54,8 @@ INSTALLED_APPS = [ 'apps.consulting', 'apps.exam', 'apps.ops', - 'apps.edu' - + 'apps.edu', + 'apps.information' ] MIDDLEWARE = [ diff --git a/server/server/settings_dev.py b/server/server/settings_dev.py index 28f1715..2de3278 100644 --- a/server/server/settings_dev.py +++ b/server/server/settings_dev.py @@ -9,12 +9,21 @@ DATABASES = { # 'HOST': '47.95.0.242', # 'PORT': '5432', # }, - 'default': { +# 'default': { +# 'ENGINE': 'django.db.backends.postgresql', +# 'NAME': 'cma', +# 'USER': 'cma', +# 'PASSWORD': 'cma123', +# 'HOST': '172.16.80.102', +# # 'HOST': '1.203.161.102', +# 'PORT': '5432', +# } + 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'cma', - 'USER': 'cma', - 'PASSWORD': 'cma123', - 'HOST': '172.16.80.102', + 'USER': 'postgres', + 'PASSWORD': 'zcDsj2021', + 'HOST': '49.232.14.174', # 'HOST': '1.203.161.102', 'PORT': '5432', }