diff --git a/.idea/ITShowPlatform.iml b/.idea/ITShowPlatform.iml
index 20babcd..d0876a7 100644
--- a/.idea/ITShowPlatform.iml
+++ b/.idea/ITShowPlatform.iml
@@ -1,28 +1,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
new file mode 100644
index 0000000..77fc973
--- /dev/null
+++ b/.idea/dataSources.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ mysql.8
+ true
+ com.mysql.cj.jdbc.Driver
+ jdbc:mysql://localhost:3306/ITStudio
+ $ProjectFileDir$
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 3dc583b..bced134 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -1,11 +1,48 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 28a804d..d1e22ec 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,4 @@
-
-
-
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index bc6e095..c6d6971 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -1,7 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -9,20 +55,55 @@
-
-
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1650727372817
+
+
+ 1650727372817
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ITShowPlatform/settings.py b/ITShowPlatform/settings.py
index b3ceb1c..5b796f0 100644
--- a/ITShowPlatform/settings.py
+++ b/ITShowPlatform/settings.py
@@ -78,16 +78,15 @@ WSGI_APPLICATION = 'ITShowPlatform.wsgi.application'
# https://docs.djangoproject.com/en/4.0/ref/settings/#databases
DATABASES = {
- 'default': {
+ 'default': {
'ENGINE': 'django.db.backends.mysql',
- 'NAME': "ITShowPlatform",
- 'PORT': '3306',
- 'PASSWORD': 'HNXhnx123',
+ 'NAME': 'ITStudio',
'USER': 'root',
- 'HOST': '127.0.0.1'
+ 'PASSWORD': 'Kjh030106',
}
}
+
# Password validation
# https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators
diff --git a/ITShowPlatform/urls.py b/ITShowPlatform/urls.py
index 0e97036..a66ee19 100644
--- a/ITShowPlatform/urls.py
+++ b/ITShowPlatform/urls.py
@@ -19,10 +19,15 @@ from django.views.static import serve
from ITShowPlatform import settings
from rest_framework import routers
+from history.views import DepartmentViewSet, MemberViewSet, HistoryViewSet
+
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('comments.urls')),
path('api/', include('history.urls')),
path(r'^api-auth/', include('rest_framework.urls')),
re_path(r'^media/(?P.*)', serve, {"document_root": settings.MEDIA_ROOT}),
+ path('api/department/', DepartmentViewSet.as_view()),
+ path('api/member/', MemberViewSet.as_view()),
+ path('api/history_list/', HistoryViewSet.as_view()),
]
diff --git a/history/admin.py b/history/admin.py
index b479430..08203f1 100644
--- a/history/admin.py
+++ b/history/admin.py
@@ -1,5 +1,7 @@
from django.contrib import admin
-from .models import History
-# Register your models here.
+from .models import *
+
+admin.site.register(Department)
admin.site.register(History)
+admin.site.register(Members)
diff --git a/history/apps.py b/history/apps.py
index bff7de8..53e978c 100644
--- a/history/apps.py
+++ b/history/apps.py
@@ -1,6 +1,6 @@
from django.apps import AppConfig
-class HistoryConfig(AppConfig):
+class TodoListConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'history'
diff --git a/history/migrations/0001_initial.py b/history/migrations/0001_initial.py
index 97c47b9..6ad151e 100644
--- a/history/migrations/0001_initial.py
+++ b/history/migrations/0001_initial.py
@@ -1,4 +1,4 @@
-# Generated by Django 3.2.5 on 2022-04-15 14:20
+# Generated by Django 3.1.2 on 2022-04-17 06:52
from django.db import migrations, models
@@ -11,14 +11,47 @@ class Migration(migrations.Migration):
]
operations = [
+ migrations.CreateModel(
+ name='Department',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('did', models.IntegerField(verbose_name='部门ID')),
+ ('department', models.CharField(max_length=10, verbose_name='部门')),
+ ('part', models.IntegerField(default=0, verbose_name='部分')),
+ ('title', models.CharField(max_length=30, verbose_name='标题')),
+ ('content', models.CharField(max_length=1500, verbose_name='内容')),
+ ],
+ options={
+ 'verbose_name_plural': '部门详情',
+ 'db_table': 'it_Department',
+ },
+ ),
migrations.CreateModel(
name='History',
fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('grade', models.IntegerField(verbose_name='年份')),
- ('name', models.CharField(max_length=30, verbose_name='事件名称')),
- ('description', models.CharField(max_length=200, verbose_name='事件描述')),
- ('img', models.ImageField(upload_to='', verbose_name='图片')),
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('grade', models.IntegerField(verbose_name='年级')),
+ ('did', models.IntegerField(verbose_name='部门ID')),
+ ('department', models.CharField(max_length=10, verbose_name='部门')),
],
+ options={
+ 'verbose_name_plural': '历史表',
+ 'db_table': 'it_History',
+ },
+ ),
+ migrations.CreateModel(
+ name='Members',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('department', models.CharField(max_length=10, verbose_name='所属部门')),
+ ('avatar', models.ImageField(blank=True, upload_to='avatar', verbose_name='头像')),
+ ('grade', models.IntegerField(verbose_name='年级')),
+ ('name', models.CharField(max_length=10, verbose_name='成员姓名')),
+ ('motto', models.CharField(max_length=30, verbose_name='座右铭')),
+ ],
+ options={
+ 'verbose_name_plural': '部门成员',
+ 'db_table': 'it_Members',
+ },
),
]
diff --git a/history/migrations/0002_alter_history_img.py b/history/migrations/0002_alter_history_img.py
deleted file mode 100644
index dcda24d..0000000
--- a/history/migrations/0002_alter_history_img.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 3.2.5 on 2022-04-15 14:32
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('history', '0001_initial'),
- ]
-
- operations = [
- migrations.AlterField(
- model_name='history',
- name='img',
- field=models.ImageField(upload_to='image', verbose_name='图片'),
- ),
- ]
diff --git a/history/migrations/0003_alter_history_img.py b/history/migrations/0003_alter_history_img.py
deleted file mode 100644
index 3e20c30..0000000
--- a/history/migrations/0003_alter_history_img.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 3.2.5 on 2022-04-15 23:05
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('history', '0002_alter_history_img'),
- ]
-
- operations = [
- migrations.AlterField(
- model_name='history',
- name='img',
- field=models.ImageField(upload_to='', verbose_name='图片'),
- ),
- ]
diff --git a/history/models.py b/history/models.py
index 7780d83..e57537c 100644
--- a/history/models.py
+++ b/history/models.py
@@ -1,11 +1,39 @@
from django.db import models
-
-# Create your models here.
+from django.core.validators import validate_comma_separated_integer_list
+class Department(models.Model):
+ did = models.IntegerField("部门ID")
+ department = models.CharField("部门", max_length=10) # 如“程序部”
+ part = models.IntegerField("部分", default=0) # 0:内容一;1:内容二 (可能没必要)
+ title = models.CharField("标题", max_length=30) # 如部门介绍/部门要求
+ content = models.CharField("内容", max_length=1500) # 如部门介绍/部门要求
+
+ class Meta:
+ db_table = 'it_Department'
+ verbose_name_plural = u'部门详情'
+
+
class History(models.Model):
- grade = models.IntegerField(verbose_name="年份")
- name = models.CharField(verbose_name="事件名称", max_length=30)
- description = models.CharField(verbose_name="事件描述", max_length=200)
- img = models.ImageField(verbose_name="图片", upload_to="image")
+ grade = models.IntegerField("年级")
+ did = models.IntegerField("部门ID")
+ department = models.CharField("部门", max_length=10) # 如“程序部”
+
+ class Meta:
+ db_table = 'it_History'
+ verbose_name_plural = u'历史表'
+
+
+class Members(models.Model):
+ # 默认id作为成员id
+ avatar = models.ImageField("头像", upload_to="avatar", blank=True)
+ did = models.IntegerField("所属部门ID", default=0)
+ grade = models.IntegerField("年级")
+ name = models.CharField("成员姓名", max_length=10)
+ motto = models.CharField("座右铭", max_length=30)
+ department = models.CharField("所属部门", max_length=10)
+
+ class Meta:
+ db_table = 'it_Members'
+ verbose_name_plural = u'部门成员'
diff --git a/history/serializers.py b/history/serializers.py
index 11729e7..ab52c15 100644
--- a/history/serializers.py
+++ b/history/serializers.py
@@ -1,19 +1,75 @@
from rest_framework import serializers
-from .models import *
+from history.models import *
+from django.core.validators import int_list_validator
-class HistoryInfoSerializer(serializers.ModelSerializer):
+class DepartmentSerializer(serializers.HyperlinkedModelSerializer):
+ class Meta:
+ model = Department
+ fields = ('did', 'department', 'part', 'title', 'content')
+
+ did = serializers.IntegerField(required=True, error_messages={"blank": '部门ID不能为空', "invalid": '类型错误'})
+ department = serializers.CharField(max_length=10, required=True, trim_whitespace=True,
+ error_messages={"max_length": '长度过长', "blank": '部门名称不能为空'})
+ part = serializers.IntegerField(required=True, error_messages={"blank": '不能为空'}) # 区分同意部分不同段落
+ title = serializers.CharField(required=False, trim_whitespace=True, max_length=30,
+ error_messages={"max_length": '题目过长'})
+ content = serializers.CharField(max_length=600, required=True, trim_whitespace=True,
+ error_messages={"max_length": '内容过长', "blank": '内容不能为空'})
+
+ def update(self, instance, validated_data):
+ instance.content = validated_data.get("content", instance.content)
+ instance.department = validated_data.get("department", instance.department)
+ instance.id = validated_data.get("id", instance.id)
+ instance.title = validated_data.get("title", instance.title)
+ instance.part = validated_data.get("part", instance.part)
+ instance.save()
+ return instance
+
+
+class MembersSerializer(serializers.HyperlinkedModelSerializer):
+ class Meta:
+ model = Members
+ fields = ('did', 'department', 'grade', 'name', 'motto', 'avatar')
+
+ did = serializers.IntegerField(required=True, error_messages={"blank": '部门ID不能为空', "invalid": '类型错误'})
+ department = serializers.CharField(max_length=10, required=True, trim_whitespace=True,
+ error_messages={"max_length": '部门名称过长', "blank": '部门名称不能为空'})
+ grade = serializers.IntegerField(required=True, min_value=2002, max_value=2022,
+ error_messages={"max_value": '年级数过大', "blank": "年级数不能为空", "min_value": '年级数过小'})
+ name = serializers.CharField(required=True, trim_whitespace=True, max_length=6,
+ error_messages={"blank": '姓名不能为空', "max_length": '姓名过长'})
+ motto = serializers.CharField(required=False, trim_whitespace=True, max_length=25,
+ error_messages={"max_length": '座右铭过长'})
+ avatar = serializers.ImageField()
+
+ def update(self, instance, validated_data):
+ instance.did = validated_data.get("did", instance.did)
+ instance.department = validated_data.get("department", instance.department)
+ instance.grade = validated_data.get("grade", instance.grade)
+ instance.name = validated_data.get("name", instance.name)
+ instance.motto = validated_data.get("motto", instance.motto)
+ instance.avatar = validated_data.get("avatar", instance.avatar)
+ instance.save()
+ return instance
+
+
+class HistorySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = History
- fields = '__all__'
- grade = serializers.CharField(label="年级", required=True)
- name = serializers.CharField(label="事件名称", max_length=30, required=True)
- description = serializers.CharField(label="事件描述", max_length=200, required=True)
- img = serializers.ImageField(label="图片", required=False)
+ fields = ('grade', 'did', 'department')
- def validate_grade(self, value):
- if not (2010 < value <= 2021):
- raise serializers.ValidationError("不合法输入")
- return value
+ grade = serializers.IntegerField(required=True, min_value=1970, max_value=2022,
+ error_messages={"max_value": '年级数过大', "blank": "年级数不能为空", "min_value": '年级数过小'})
+ did = serializers.IntegerField(required=True, error_messages={"blank": '部门ID不能为空', "invalid": '类型错误'})
+ department = serializers.CharField(max_length=10, required=True, trim_whitespace=True,
+ error_messages={"max_length": '部门名称过长', "blank": '部门名称不能为空'})
+
+ def update(self, instance, validated_data):
+ instance.department = validated_data.get("department", instance.department)
+ instance.grade = validated_data.get("grade", instance.grade)
+ instance.did = validated_data.get("did", instance.did)
+ instance.save()
+ return instance
diff --git a/history/urls.py b/history/urls.py
index 6c099cc..e756792 100644
--- a/history/urls.py
+++ b/history/urls.py
@@ -1,11 +1,8 @@
-from django.contrib import admin
-from django.urls import path
-from . import views
from django.conf.urls.static import static
from ITShowPlatform import settings
+from django.urls import path
+from history.views import DepartmentViewSet, MemberViewSet, HistoryViewSet
urlpatterns = [
- path('history/', views.history.as_view()),
-]
-urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
+] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
diff --git a/history/views.py b/history/views.py
index 581329f..64ad590 100644
--- a/history/views.py
+++ b/history/views.py
@@ -1,37 +1,90 @@
-import time
-from django.conf import settings
-import re
-from django.shortcuts import render
+from django.http import JsonResponse
from rest_framework.views import APIView
+from history.serializers import *
from rest_framework.response import Response
-from .models import History
-from .serializers import HistoryInfoSerializer
-# Create your views here.
+from django.db.models import Q
+from django.utils.decorators import method_decorator
+from django.views.decorators.csrf import csrf_exempt
+from django.core.cache import cache
-class history(APIView):
-
+class DepartmentViewSet(APIView):
+ # 获取部门信息
+ @method_decorator(csrf_exempt)
def get(self, request):
- key = []
- data = {"data": key}
- for i in range(2012, 2022):
- temp = {}
- try:
- works_set = History.objects.filter(grade=i)
- if works_set:
- serializer = HistoryInfoSerializer(works_set, many=True)
- temp['grade'] = i
- temp['data'] = serializer.data
- data['data'].append(temp)
- except Exception:
- pass
- if len(data['data']) == 0:
- data['code'] = 40000
- data['msg'] = "error"
+ response = {
+ "code": 20000,
+ "msg": "成功",
+ }
+ queryset = Department.objects.all().filter(did=request.GET.get('did'))
+ serializer = DepartmentSerializer(queryset, many=True, context={'request': request})
+ try:
+ response["data"] = serializer.data
+ except:
+ response['msg'] = serializer.error_messages
+ if len(response['data']) == 0:
+ response['code'] = 40000
+ response['msg'] = "未返回数据"
else:
- data['code'] = 20000
- data['msg'] = 'success'
- return Response(data=data)
+ response['code'] = 20000
+ response['msg'] = "成功"
+ return Response(data=response)
+class MemberViewSet(APIView):
+ # 获取历史成员信息
+ @method_decorator(csrf_exempt)
+ def get(self, request):
+ response = {
+ "code": 20000,
+ "msg": "成功",
+ }
+ grade = request.GET.get('grade')
+ did = request.GET.get('did')
+ try:
+ queryset = Members.objects.all().filter(Q(grade=grade) & Q(did=did))
+ serializer = MembersSerializer(queryset, many=True)
+ except:
+ response = {
+ "code": 40000,
+ "msg": "错误",
+ }
+ return Response(data=response)
+ response["data"] = serializer.data
+ return Response(data=response)
+
+class HistoryViewSet(APIView):
+ # 获取历史成员信息
+ @method_decorator(csrf_exempt)
+ def get(self, request):
+ response = {
+ "code": 20000,
+ "msg": "成功",
+ }
+ # queryset = History.objects.all()
+ # serializer = HistorySerializer(queryset, many=True, context={'request': request})
+ # try:
+ # s = serializer.data
+ # except:
+ # response['code'] = 40000
+ # response['msg'] = serializer.error_messages.first()
+ info = []
+ for i in range(2002, 2022):
+ data = {}
+ data['grade'] = i
+ y = []
+ for j in range(0, 6):
+ try:
+ a = History.objects.get(Q(did=j) & Q(grade=i))
+ except:
+ continue
+ x = {}
+ x['id'] = a.did
+ x['department_name'] = a.department
+ y.append(x)
+ data['data'] = y
+ info.append(data)
+ response["data"] = info
+ print(response)
+ return Response(data=response)