2 Commits

Author SHA1 Message Date
康家辉 ba11978e82 添加年级下拉选项 2022-05-11 21:33:19 +08:00
康家辉 72e28e0dd7 根据修改后的model修改了view 2022-05-11 21:26:01 +08:00
31 changed files with 323 additions and 617 deletions
+29 -44
View File
@@ -28,7 +28,7 @@ conf.read(os.path.join(BASE_DIR, "config.ini"), encoding="utf-8")
SECRET_KEY = conf.get("Django", "SECRET_KEY"), SECRET_KEY = conf.get("Django", "SECRET_KEY"),
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False DEBUG = True
ALLOWED_HOSTS = ["*"] ALLOWED_HOSTS = ["*"]
@@ -37,8 +37,8 @@ ALLOWED_HOSTS = ["*"]
INSTALLED_APPS = [ INSTALLED_APPS = [
'simpleui',
'corsheaders', 'corsheaders',
'simpleui',
'django.contrib.admin', 'django.contrib.admin',
'django.contrib.auth', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.contenttypes',
@@ -50,7 +50,6 @@ INSTALLED_APPS = [
'apps.history', 'apps.history',
'apps.comments', 'apps.comments',
'apps.work', 'apps.work',
"sslserver",
] ]
@@ -61,8 +60,8 @@ MIDDLEWARE = [
#'django.middleware.csrf.CsrfViewMiddleware', #'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
] ]
@@ -158,9 +157,6 @@ EMAIL_HOST_PASSWORD = conf.get("email","EMAIL_HOST_PASSWORD") # 密码 (注意
EMAIL_USE_SSL = conf.get("email","EMAIL_USE_SSL") # 一般都为False EMAIL_USE_SSL = conf.get("email","EMAIL_USE_SSL") # 一般都为False
EMAIL_FROM = conf.get("email","EMAIL_FROM") # 邮箱来自 EMAIL_FROM = conf.get("email","EMAIL_FROM") # 邮箱来自
SIMPLEUI_HOME_INFO = False
SIMPLEUI_ANALYSIS = False
SIMPLEUI_LOGO = "https://s2.loli.net/2022/05/15/2Mlvi6gYa3eFcxw.png"
ADMINS = ( ADMINS = (
('ladeng', '2312936963@qq.com'), ('ladeng', '2312936963@qq.com'),
@@ -222,44 +218,33 @@ LOGGING = {
}, },
} }
# CORS_ALLOW_CREDENTIALS = True CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True CORS_ORIGIN_ALLOW_ALL = True
# CORS_ORIGIN_WHITELIST = ( CORS_ORIGIN_WHITELIST = (
# '127.0.0.1:*', ['http://127.0.0.1:*']
# '0.0.0.0:*' )
# ) CORS_ALLOW_METHODS = (
# CORS_ALLOW_METHODS = ( 'DELETE',
# 'DELETE', 'GET',
# 'GET', 'OPTIONS',
# 'OPTIONS', 'PATCH',
# 'PATCH', 'POST',
# 'POST', 'PUT',
# 'PUT', 'VIEW',
# 'VIEW', )
# )
# CORS_ALLOW_HEADERS = ( CORS_ALLOW_HEADERS = (
# 'XMLHttpRequest', 'XMLHttpRequest',
# 'X_FILENAME', 'X_FILENAME',
# 'accept-encoding', 'accept-encoding',
# 'authorization', 'authorization',
# 'content-type', 'content-type',
# 'dnt', 'dnt',
# 'origin', 'origin',
# 'user-agent', 'user-agent',
# 'x-csrftoken', 'x-csrftoken',
# 'x-requested-with', 'x-requested-with',
# 'Pragma', 'Pragma',
# ) )
# SECURE_SSL_REDIRECT = True
# SESSION_COOKIE_SECURE = True
# SESSION_EXPIRE_AT_BROWSER_CLOSE = True
CSRF_COOKIE_SECURE = True
CSRF_TRUSTED_ORIGINS = ['127.0.0.1', 'www.itstudio.club',".lmark.cc","101.43.216.170"]
# SECURE_HSTS_SECONDS = 60
# SECURE_HSTS_INCLUDE_SUBDOMAINS = True
+1 -6
View File
@@ -2,9 +2,4 @@ from django.contrib import admin
from .models import Comments from .models import Comments
# Register your models here. # Register your models here.
class CommentsAdmin(admin.ModelAdmin): admin.site.register(Comments)
list_display = ('id', "post_time","content")
admin.site.register(Comments,CommentsAdmin)
-1
View File
@@ -4,4 +4,3 @@ from django.apps import AppConfig
class CommentsConfig(AppConfig): class CommentsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField' default_auto_field = 'django.db.models.BigAutoField'
name = 'apps.comments' name = 'apps.comments'
verbose_name = '弹幕管理'
+1 -1
View File
@@ -1,6 +1,6 @@
from rest_framework import serializers from rest_framework import serializers
from .models import * from .models import *
from utils.util import get_msg from utils.get_msg import get_msg
class CommentsInfo(serializers.ModelSerializer): class CommentsInfo(serializers.ModelSerializer):
+1 -1
View File
@@ -7,7 +7,7 @@ from rest_framework.response import Response
from .models import * from .models import *
from .serializers import CommentsInfo from .serializers import CommentsInfo
from django.utils import timezone from django.utils import timezone
from utils.util import get_msg from utils.get_msg import get_msg
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
# Create your views here. # Create your views here.
+39 -6
View File
@@ -2,21 +2,54 @@ from django.contrib import admin
from .models import * from .models import *
# Register your models here.
# class DepartmentAdmin(admin.ModelAdmin):
# # 定制哪些字段需要展示
# list_display = ('id', 'name', 'picture')
#
# # sortable_by # 排序
#
# list_editable = ('name', 'picture',)
#
#
# list_per_page = 10
#
#
# list_max_show_all = 200 # default
#
#
# search_fields = ['title']
#
# # date_hierarchy = 'create_date'
#
# '''默认空值'''
# empty_value_display = 'NA'
#
# '''过滤选项'''
# list_filter = ()
class New_memberAdmin(admin.ModelAdmin): class New_memberAdmin(admin.ModelAdmin):
# 定制哪些字段需要展示 # 定制哪些字段需要展示
list_display = ('id', 'name', 'sex',"major","department","phone_number","email","expectation","status") list_display = ('id', 'name', 'picture')
list_filter = ('sex', 'department',"status" ) # sortable_by # 排序
list_editable = ('status',"department" ) list_editable = ('name', 'picture',)
search_fields = ['name'] list_per_page = 10
list_max_show_all = 200 # default
search_fields = ['title']
# date_hierarchy = 'create_date'
'''默认空值'''
empty_value_display = 'NA' empty_value_display = 'NA'
'''过滤选项'''
list_filter = ()
# admin.site.register(Department ,DepartmentAdmin) # admin.site.register(Department ,DepartmentAdmin)
admin.site.register(NewMember,New_memberAdmin) admin.site.register(NewMember)
# admin.site.register(EmailVerifyRecord) # admin.site.register(EmailVerifyRecord)
-1
View File
@@ -4,4 +4,3 @@ from django.apps import AppConfig
class EnrollConfig(AppConfig): class EnrollConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField' default_auto_field = 'django.db.models.BigAutoField'
name = 'apps.enroll' name = 'apps.enroll'
verbose_name = '报名管理'
+5 -6
View File
@@ -37,18 +37,17 @@ def send_code_email(email):
code = "".join([str(random.randint(0, 9)) for i in range(4)]) code = "".join([str(random.randint(0, 9)) for i in range(4)])
email_record.code = code email_record.code = code
email_record.email = email email_record.email = email
email_record.save()
# 初始化为空 # 初始化为空
email_title = "" email_title = ""
email_body = "" email_body = ""
email_title = "注册激活" email_title = "注册激活"
# file = open("/email_body") # file = open("/email_body")
file = open(os.path.join(BASE_DIR, "enroll", "email_body")) file = open(os.path.join(BASE_DIR, "enroll", "email_body"))
email_body = str(file.read()).format(code) email_body = str(file.read).format(code)
# 发送邮件 # 发送邮件
try: send_status = send_mail(email_title, email_body, settings.EMAIL_FROM, [email])
send_status = send_mail(email_title, email_body, settings.EMAIL_FROM, [email]) if not send_status:
except:
return False return False
email_record.save()
return True return True
+13 -22
View File
@@ -3,14 +3,15 @@ from rest_framework.validators import UniqueValidator
from apps.enroll.models import NewMember, EmailVerifyRecord from apps.enroll.models import NewMember, EmailVerifyRecord
from apps.history.models import Department from apps.history.models import Department
import time import time
from utils.util import get_msg from utils.get_msg import get_msg
class DepartmentSerializer(serializers.ModelSerializer): class DepartmentSerializer(serializers.ModelSerializer):
"""获取部门信息""" """获取部门信息"""
class Meta: class Meta:
model = Department model = Department
fields = ["id","department_cn", "icon"] fields = ["department_cn", "picture"]
class NewMemberSerializer(serializers.ModelSerializer): class NewMemberSerializer(serializers.ModelSerializer):
@@ -20,16 +21,16 @@ class NewMemberSerializer(serializers.ModelSerializer):
email = serializers.EmailField(validators=[ email = serializers.EmailField(validators=[
UniqueValidator( UniqueValidator(
queryset=NewMember.objects.all(), queryset=NewMember.objects.all(),
message="43032" message=get_msg(43032)
) )
]) ])
phone_number = serializers.CharField(validators=[ phone_number = serializers.CharField(validators=[
UniqueValidator( UniqueValidator(
queryset=NewMember.objects.all(), queryset=NewMember.objects.all(),
message="43033" message=get_msg(43033)
), ),
], ],
max_length=11, error_messages={"max_length":"42033"} max_length=11, error_messages={"max_length": get_msg(42033)}
) )
class Meta: class Meta:
@@ -39,27 +40,17 @@ class NewMemberSerializer(serializers.ModelSerializer):
extra_kwargs = { extra_kwargs = {
"name": { "name": {
"error_messages": { "error_messages": {
"max_length": "42034" "max_length": get_msg(42034)
} }
}, },
"major": { "major": {
"error_messages": { "error_messages": {
"max_length": "42006" "max_length": get_msg(42035)
} }
}, },
"department": { "department_cn": {
"error_messages": { "error_messages": {
"invalid_choice":"42036" "invalid_choice": get_msg(42036)
}
},
"expectation": {
"error_messages": {
"max_length": "42035"
}
},
"sex": {
"error_messages": {
"invalid_choice":"42008"
} }
}, },
@@ -81,8 +72,8 @@ class SendEmailSerializer(serializers.Serializer):
email = serializers.EmailField(max_length=50, email = serializers.EmailField(max_length=50,
validators=[UniqueValidator( validators=[UniqueValidator(
queryset=NewMember.objects.all(), queryset=NewMember.objects.all(),
message="43032")], message=get_msg(43032))],
error_messages={"max_length": "42032", "invalid": "44036"}) error_messages={"max_length": get_msg(42032), "invalid": get_msg(44036)})
def validate_email(self, data): def validate_email(self, data):
@@ -94,7 +85,7 @@ class SendEmailSerializer(serializers.Serializer):
now = time.time() now = time.time()
# print(f"now={now},send={send_time}") # print(f"now={now},send={send_time}")
if now - send_time < 120: if now - send_time < 120:
raise serializers.ValidationError(code="verification_code", detail="44033") raise serializers.ValidationError(code="verification_code", detail=get_msg(44033))
else: else:
# print(oj.email) # print(oj.email)
oj.delete() oj.delete()
+1 -3
View File
@@ -4,10 +4,8 @@ from . import views
# from rest_framework.routers import DefaultRouter # from rest_framework.routers import DefaultRouter
urlpatterns = [ urlpatterns = [
path("department/", views.DepartmentMessageView.as_view()), path("department_cn/", views.DepartmentMessageView.as_view()),
path("sign_up/", views.SignUpView.as_view()), path("sign_up/", views.SignUpView.as_view()),
path("sign_up/verification_code/", views.SendEmailView.as_view()), path("sign_up/verification_code/", views.SendEmailView.as_view()),
path("shangbao/", views.OucView.as_view()),
path("newmemberinfo/", views.ExportView.as_view(),name="newmemberinfo"),
# path("sign_up/<string:pk>", views.Sign_in.as_view({"get": "get"})) # path("sign_up/<string:pk>", views.Sign_in.as_view({"get": "get"}))
] ]
+15 -86
View File
@@ -1,6 +1,5 @@
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.generics import GenericAPIView from rest_framework.generics import GenericAPIView
from rest_framework.permissions import IsAdminUser
from apps.history.models import Department from apps.history.models import Department
from apps.enroll.models import EmailVerifyRecord, NewMember from apps.enroll.models import EmailVerifyRecord, NewMember
from apps.enroll.serializers import DepartmentSerializer, NewMemberSerializer, NewMemberScheduleSerializer, \ from apps.enroll.serializers import DepartmentSerializer, NewMemberSerializer, NewMemberScheduleSerializer, \
@@ -9,32 +8,22 @@ from rest_framework import status
from rest_framework.views import APIView from rest_framework.views import APIView
from apps.enroll.email import send_code_email from apps.enroll.email import send_code_email
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import HttpResponse from utils.get_msg import get_msg
from ITShowPlatform.settings import BASE_DIR import re
from apps.enroll.models import NewMember
from utils.util import get_msg
import re,configparser,os
import time import time
import xlwt
conf = configparser.RawConfigParser()
conf.read(os.path.join(BASE_DIR, "config.ini"), encoding="utf-8")
class DepartmentMessageView(GenericAPIView): class DepartmentMessageView(GenericAPIView):
"""获取部门信息""" """获取部门信息"""
global queryset
queryset = Department.objects.filter(status=True) queryset = Department.objects.all()
serializer_class = DepartmentSerializer serializer_class = DepartmentSerializer
def get(self, request): def get(self, request):
# serializer = self.get_serializer(instance=self.get_queryset(), many=True) #会自动补完成绝对路径 serializer = self.get_serializer(instance=self.get_queryset(), many=True)
serializer = DepartmentSerializer(instance=queryset,many=True) # print(request.query_params)
if request.query_params: if request.query_params:
return Response({"code": 40000, "msg": get_msg("40000")}) return Response({"code": 40000, "msg": get_msg("40000")})
for i in serializer.data:
i["icon"] = (conf.get("Django","Host") + i["icon"])
return Response({"code": 20000, "msg": get_msg("20000"), "data": serializer.data}) return Response({"code": 20000, "msg": get_msg("20000"), "data": serializer.data})
@@ -51,7 +40,6 @@ class SignUpView(GenericAPIView):
@csrf_exempt @csrf_exempt
def post(self, request): def post(self, request):
data = request.data data = request.data
print(data)
serializer = self.get_serializer(data=data) serializer = self.get_serializer(data=data)
code = data['verification_code'] code = data['verification_code']
ret = serializer.is_valid(raise_exception=False) ret = serializer.is_valid(raise_exception=False)
@@ -59,38 +47,33 @@ class SignUpView(GenericAPIView):
# print(f"code={code}") # print(f"code={code}")
try: try:
oj = EmailVerifyRecord.objects.get(email=data['email']) oj = EmailVerifyRecord.objects.get(email=data['email'])
print(oj.code,code)
send_time = str(oj.send_time).split('+')[0].split('.')[0] send_time = str(oj.send_time).split('+')[0].split('.')[0]
send_time = time.mktime(time.strptime(send_time, '%Y-%m-%d %X')) send_time = time.mktime(time.strptime(send_time, '%Y-%m-%d %X'))
now = time.time() now = time.time()
if now - send_time > 120: if now - send_time > 120:
oj.delete()
return Response( return Response(
{"code": 40000, "msg": get_msg("45032")}, {"code": 40000, "msg": {"verification_code": get_msg(45032)}},
status=status.HTTP_400_BAD_REQUEST) status=status.HTTP_400_BAD_REQUEST)
if str(code) != oj.code: if code != oj.code:
return Response({"code": 45031, "msg": get_msg("44031")}, return Response({"code": 45031, "msg": {"verification_code": get_msg(44031)}},
status=status.HTTP_400_BAD_REQUEST) status=status.HTTP_400_BAD_REQUEST)
except (EmailVerifyRecord.DoesNotExist,Exception): except EmailVerifyRecord.DoesNotExist:
return Response({"code": 44032, "msg": get_msg("44032")}, return Response({"code": 44032, "msg": {"verification_code": get_msg(44032)}},
status=status.HTTP_400_BAD_REQUEST) status=status.HTTP_400_BAD_REQUEST)
serializer.save() serializer.save()
oj.delete()
return Response({"code": 20000, "msg": get_msg(20000)}) return Response({"code": 20000, "msg": get_msg(20000)})
else: else:
error = {} error = {}
for (i, j) in zip(serializer.errors.keys(), serializer.errors.values()): for (i, j) in zip(serializer.errors.keys(), serializer.errors.values()):
error[str(i)] = str(j[0]) error[str(i)] = str(j[0])
return Response({"code": int(j[0]), "msg": get_msg(j[0])}, status=status.HTTP_400_BAD_REQUEST) return Response({"code": 40000, "msg": error}, status=status.HTTP_400_BAD_REQUEST)
#return Response({"code": 40000, "msg": error}, status=status.HTTP_400_BAD_REQUEST)
def get(self, request): def get(self, request):
string = request.query_params.get('string', '') string = request.query_params.get('string', '')
try: try:
if re.match('^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$', string): if re.match('^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$', string):
queryset = self.get_queryset().get(email=string) queryset = self.get_queryset().get(email=string)
elif re.match('^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9]|17[0-9]|19[0-9])\d{8}$', string): elif re.match('^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$', string):
queryset = self.get_queryset().get(phone_number=string) queryset = self.get_queryset().get(phone_number=string)
else: else:
queryset = self.get_queryset().get(id=-1) queryset = self.get_queryset().get(id=-1)
@@ -108,68 +91,14 @@ class SendEmailView(APIView):
def post(self, request): def post(self, request):
data = request.data data = request.data
serializer = SendEmailSerializer(data=data) serializer = SendEmailSerializer(data=data)
# code_serializer = Code_email_serializer() # code_serializer = Code_email_serializer()
ret = serializer.is_valid() ret = serializer.is_valid()
if ret: if ret:
# serializer.save() # serializer.save()
if not send_code_email(data.get("email")): send_code_email(data.get("email"))
return Response({"code": 42031, "msg": get_msg(42031)}, status=status.HTTP_400_BAD_REQUEST)
return Response({"code": 20000, "msg": get_msg(20000)}) return Response({"code": 20000, "msg": get_msg(20000)})
else: else:
error = {} error = {}
for (i, j) in zip(serializer.errors.keys(), serializer.errors.values()): for (i, j) in zip(serializer.errors.keys(), serializer.errors.values()):
error[str(i)] = str(j[0]) error[str(i)] = str(j[0])
return Response({"code": 40000, "msg": error}, status=status.HTTP_400_BAD_REQUEST)
return Response({"code": int(j[0]), "msg": get_msg(j[0])}, status=status.HTTP_400_BAD_REQUEST)
#return Response({"code": 40000, "msg": error}, status=status.HTTP_400_BAD_REQUEST)
class OucView(APIView):
"""用来给ipad自动任务跑每日上报脚本的,装杯用"""
def get(self, request):
return Response({"code": 20000, "msg": get_msg(20000)})
class ExportView(APIView):
#permission_classes = [IsAdminUser]
"""
不会带token访问,准备交给run宁哥
"""
def get(self, request, *args, **kwargs):
response = HttpResponse(content_type='application/ms-excel')
# 设置文件名称
response['Content-Disposition'] = 'attachment; filename="NewMember.xls"'
# 创建工作簿
wb = xlwt.Workbook(encoding='utf-8')
# 创建表
ws = wb.add_sheet('Member')
row_num = 0
font_style = xlwt.XFStyle()
# 二进制
font_style.font.bold = True
# 表头内容
columns = ['ID', '姓名', '性别', '年级专业',"意向部门","手机号码","邮箱","期待的话","报名状态"]
# 写进表头内容
for col_num in range(len(columns)):
ws.write(row_num, col_num, columns[col_num], font_style)
# Sheet body, remaining rows
font_style = xlwt.XFStyle()
# 获取数据库数据
rows = NewMember.objects.values_list('id', "name","sex","major","department","phone_number","email","expectation","status")
# 遍历提取出来的内容
for row in rows:
row_num += 1
# 逐行写入Excel
for col_num in range(len(row)):
#return HttpResponse(col_num)
ws.write(row_num, col_num, row[col_num], font_style)
wb.save(response)
return response
#test
+4 -10
View File
@@ -1,14 +1,8 @@
from django.contrib import admin from django.contrib import admin
from .models import * from .models import *
class DepartmentAdmin(admin.ModelAdmin):
list_display = ("id","department_cn","department_en","icon","background","status")
class HistoryAdmin(admin.ModelAdmin): admin.site.register(Department)
list_display = ("id","years","department") admin.site.register(History)
admin.site.register(Members)
class MembersAdmin(admin.ModelAdmin): #admin.site.register(DepartmentName)
list_display = ("id","years","name","motto","department")
admin.site.register(Department,DepartmentAdmin)
admin.site.register(History,HistoryAdmin)
admin.site.register(Members,MembersAdmin)
-1
View File
@@ -4,4 +4,3 @@ from django.apps import AppConfig
class TodoListConfig(AppConfig): class TodoListConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField' default_auto_field = 'django.db.models.BigAutoField'
name = 'apps.history' name = 'apps.history'
verbose_name = '历史部门管理'
+15 -18
View File
@@ -1,21 +1,21 @@
from django.db import models from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator from django.core.validators import MaxValueValidator, MinValueValidator
from datetime import datetime from datetime import datetime
from utils.ImageStorage import ImageStorage
def get_default_rev(): GRADE_CHOICES = (
queryset = Department.objects.values_list('id', flat = True) (2003, 2003), (2004, 2004), (2005, 2005), (2006, 2006), (2007, 2007), (2008, 2008), (2009, 2009),
for query in queryset: (2010, 2010), (2011, 2011), (2012, 2012), (2013, 2013), (2014, 2014), (2015, 2015), (2016, 2016),
return query (2017, 2017), (2018, 2018), (2019, 2019), (2020, 2020), (2021, 2021)
)
class Department(models.Model): class Department(models.Model):
id = models.BigAutoField(auto_created=True, primary_key=True, verbose_name='部门ID') id = models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='部门ID')
# did = models.IntegerField("部门ID") # did = models.IntegerField("部门ID")
department_cn = models.CharField("部门名称", max_length=10) # 如“程序部” department_cn = models.CharField("部门名称", max_length=10) # 如“程序部”
department_en = models.CharField("部门英文名称", max_length=30) # 如“程序部” department_en = models.CharField("部门英文名称", max_length=30) # 如“程序部”
icon = models.ImageField(verbose_name="部门图标", default=0,storage=ImageStorage()) picture = models.ImageField(verbose_name="部门图标", default=0)
background = models.ImageField(verbose_name="部门图标", default=0, storage=ImageStorage())
content = models.CharField("内容", max_length=800) # 如部门介绍/部门要求 content = models.CharField("内容", max_length=800) # 如部门介绍/部门要求
introduction = models.CharField("介绍", max_length=800) # 如部门介绍/部门要求 introduction = models.CharField("介绍", max_length=800) # 如部门介绍/部门要求
status = models.SmallIntegerField("部门状态", choices=[(0, "解散"), (1, "健在")], default=1) status = models.SmallIntegerField("部门状态", choices=[(0, "解散"), (1, "健在")], default=1)
@@ -32,34 +32,31 @@ class History(models.Model):
# grade = models.IntegerField("年级") # grade = models.IntegerField("年级")
years = models.IntegerField("年份", default=int(datetime.now().strftime('%Y')), validators=[ years = models.IntegerField("年份", default=int(datetime.now().strftime('%Y')), validators=[
MaxValueValidator(2300), MaxValueValidator(2300),
MinValueValidator(2000) MinValueValidator(2010)
]) ])
# did = models.IntegerField("部门ID") # did = models.IntegerField("部门ID")
# did = models.ForeignKey(Department, on_delete=models.DO_NOTHING(), related_name="history", verbose_name="部门id") # did = models.ForeignKey(Department, on_delete=models.DO_NOTHING(), related_name="history", verbose_name="部门id")
# department_cn = models.CharField("部门", max_length=10) # 如“程序部” # department_cn = models.CharField("部门", max_length=10) # 如“程序部”
department = models.ForeignKey(Department, on_delete=models.DO_NOTHING, related_name="history", verbose_name="部门",default=1) department = models.ForeignKey(Department, on_delete=models.DO_NOTHING, related_name="history", verbose_name="部门")
class Meta: class Meta:
db_table = 'it_History' db_table = 'it_History'
verbose_name_plural = '历史表' verbose_name_plural = '历史表'
def __str__(self): def __str__(self):
return self.department.department_cn return self.department
class Members(models.Model): class Members(models.Model):
# 默认id作为成员id # 默认id作为成员id
avatar = models.ImageField("头像", upload_to="avatar", blank=True,default="default/user.jpg",storage=ImageStorage()) avatar = models.ImageField("头像", upload_to="avatar", blank=True)
# did = models.IntegerField("所属部门ID", default=0) # did = models.IntegerField("所属部门ID", default=0)
years = models.IntegerField("加入社团年份", default=int(datetime.now().strftime('%Y')), validators=[ grade = models.IntegerField("年级", choices=GRADE_CHOICES)
MaxValueValidator(2300),
MinValueValidator(2000)
])
name = models.CharField("成员姓名", max_length=10) name = models.CharField("成员姓名", max_length=10)
motto = models.CharField("座右铭", max_length=300) motto = models.CharField("座右铭", max_length=30)
# department_cn = models.CharField("所属部门", max_length=10) # department_cn = models.CharField("所属部门", max_length=10)
department = models.ForeignKey(Department, on_delete=models.DO_NOTHING, related_name="member", department = models.ForeignKey(Department, on_delete=models.DO_NOTHING, related_name="member",
verbose_name="所属部门",default = get_default_rev) verbose_name="所属部门")
class Meta: class Meta:
db_table = 'it_Members' db_table = 'it_Members'
+86 -189
View File
@@ -1,29 +1,24 @@
import re,os import re
from rest_framework import serializers from rest_framework import serializers
from ITShowPlatform.settings import BASE_DIR
from apps.history import * from apps.history import *
from apps.history.models import Department, Members, History from apps.history.models import Department, Members, History
def validate_department(value):
reg = re.compile(r'^[\u4e00-\u9fa5A-Za-z]*$')
if not reg.match(value):
raise serializers.ValidationError("42011-部门名称中只能输入汉字或英文")
def validate_department_en(value):
reg = re.compile(r'^[A-Za-z][A-Za-z\s]*$')
if not reg.match(value):
raise serializers.ValidationError("42010-部门英文名称中只能输入英文")
# def validate_department(value): def name_validate(value):
# reg = re.compile(r'^[\u4e00-\u9fa5A-Za-z]*$') reg = re.compile(r'^[\u4e00-\u9fa5A-Za-z]*$')
# if not reg.match(value): if not reg.match(value):
# raise serializers.ValidationError("42011-部门名称中只能输入汉字或英文") raise serializers.ValidationError("42012-姓名只能输入汉字或英文")
#
#
# def validate_department_en(value):
# reg = re.compile(r'^[A-Za-z][A-Za-z\s]*$')
# if not reg.match(value):
# raise serializers.ValidationError("42010-部门英文名称中只能输入英文")
#
#
# def name_validate(value):
# reg = re.compile(r'^[\u4e00-\u9fa5A-Za-z]*$')
# if not reg.match(value):
# raise serializers.ValidationError("42012-姓名只能输入汉字或英文")
# #
# def validate_avatar(value): # def validate_avatar(value):
@@ -31,189 +26,91 @@ from apps.history.models import Department, Members, History
# return s # return s
# class DepartmentSerializer(serializers.Serializer): class DepartmentSerializer(serializers.Serializer):
# did = serializers.IntegerField(required=True, error_messages={"blank": '41010-部门ID不能为空', "invalid": '42020-类型错误'}) did = serializers.IntegerField(required=True, error_messages={"blank": '41010-部门ID不能为空', "invalid": '42020-类型错误'})
# department_cn = serializers.CharField(max_length=10, required=True, trim_whitespace=True, department = serializers.CharField(max_length=10, required=True, trim_whitespace=True,
# validators=[validate_department], validators=[validate_department],
# error_messages={"max_length": '42021-部门名称长度过长', "blank": '41011-部门名称不能为空'}) error_messages={"max_length": '42021-部门名称长度过长', "blank": '41011-部门名称不能为空'})
# department_en = serializers.CharField(max_length=30, required=True, trim_whitespace=True, department_en = serializers.CharField(max_length=30, required=True, trim_whitespace=True,
# validators=[validate_department_en], validators=[validate_department_en],
# error_messages={"max_length": '42022-部门英文名称长度过长', error_messages={"max_length": '42022-部门英文名称长度过长',
# "blank": '41012-部门英文名称不能为空'}) "blank": '41012-部门英文名称不能为空'})
# content = serializers.CharField(max_length=800, required=True, trim_whitespace=True, content = serializers.CharField(max_length=800, required=True, trim_whitespace=True,
# error_messages={"max_length": '42023-内容过长', "blank": '41013-内容不能为空'}) error_messages={"max_length": '42023-内容过长', "blank": '41013-内容不能为空'})
# introduction = serializers.CharField(max_length=800, required=True, trim_whitespace=True, introduction = serializers.CharField(max_length=800, required=True, trim_whitespace=True,
# error_messages={"max_length": '42024-介绍内容过长', "blank": '41014-介绍内容不能为空'}) error_messages={"max_length": '42024-介绍内容过长', "blank": '41014-介绍内容不能为空'})
#
# # class Meta:
# # model = Department
# # fields = ('did', 'department_en', 'department_cn', 'part', 'title', 'content')
#
# def create(self, validated_data):
# return Department.objects.create(**validated_data)
#
# def update(self, instance, validated_data):
# instance.content = validated_data.get("content", instance.content)
# instance.department_cn = validated_data.get("department_cn", instance.department_cn)
# instance.department_en = validated_data.get("department_en", instance.department_en)
# 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 DepartmentSerializer(serializers.ModelSerializer): # class Meta:
class Meta: # model = Department
model = Department # fields = ('did', 'department_en', 'department', 'part', 'title', 'content')
fields = "__all__"
extra_kwargs = { def create(self, validated_data):
"department_cn": { return Department.objects.create(**validated_data)
"error_messages": {
"max_length": '42021-部门名称长度过长',
"blank": '41011-部门名称不能为空'
}
},
"department_en": {
"error_messages": {
"max_length": '42022-部门英文名称长度过长',
"blank": '41012-部门英文名称不能为空'
}
},
"content": {
"error_messages": {
"max_length": '42023-内容过长',
"blank": '41013-内容不能为空'
}
},
"introduction": {
"error_messages": {
"max_length": '42024-介绍内容过长',
"blank": '41014-介绍内容不能为空'
}
}
}
def validate_department_cn(self, data): def update(self, instance, validated_data):
reg = re.compile(r'^[\u4e00-\u9fa5A-Za-z]*$') instance.content = validated_data.get("content", instance.content)
if not reg.match(data): instance.department = validated_data.get("department", instance.department)
raise serializers.ValidationError("42011-部门名称中只能输入汉字或英文") instance.department_en = validated_data.get("department_en", instance.department_en)
return data instance.id = validated_data.get("id", instance.id)
instance.title = validated_data.get("title", instance.title)
def validate_department_en(self, data): instance.part = validated_data.get("part", instance.part)
reg = re.compile(r'^[A-Za-z][A-Za-z\s]*$') instance.save()
if not reg.match(data): return instance
raise serializers.ValidationError("42010-部门英文名称中只能输入英文")
return data
def validate_name(self, data):
reg = re.compile(r'^[\u4e00-\u9fa5A-Za-z]*$')
if not reg.match(data):
raise serializers.ValidationError("42012-姓名只能输入汉字或英文")
return data
def validate_id(self,data):
obj = Department.objects.filter(id=data)
if not obj:
raise serializers.ValidationError("查询的部门不存在")
# class MembersSerializer(serializers.HyperlinkedModelSerializer): class MembersSerializer(serializers.HyperlinkedModelSerializer):
# did = serializers.IntegerField(required=True, error_messages={"blank": '41010-部门ID不能为空', "invalid": '42020-类型错误'})
# department = serializers.CharField(max_length=10, required=True, trim_whitespace=True, did = serializers.IntegerField(required=True, error_messages={"blank": '41010-部门ID不能为空', "invalid": '42020-类型错误'})
# error_messages={"max_length": '42021-部门名称过长', "blank": '41011-部门名称不能为空'}) department = serializers.CharField(max_length=10, required=True, trim_whitespace=True,
# grade = serializers.IntegerField(required=True, min_value=2001, max_value=2022, error_messages={"max_length": '42021-部门名称过长', "blank": '41011-部门名称不能为空'})
# error_messages={"max_value": '42025-年级数过大', "blank": "41015-年级数不能为空", grade = serializers.IntegerField(required=True, min_value=2001, max_value=2022,
# "min_value": '42026-年级数过小'}) error_messages={"max_value": '42025-年级数过', "blank": "41015-年级数不能为空",
# name = serializers.CharField(required=True, trim_whitespace=True, max_length=6, "min_value": '42026-年级数过小'})
# error_messages={"blank": '41016-姓名不能为空', "max_length": '42027-姓名过长'}) name = serializers.CharField(required=True, trim_whitespace=True, max_length=6,
# motto = serializers.CharField(required=False, trim_whitespace=True, max_length=25, validators=[name_validate], error_messages={"blank": '41016-姓名不能为空', "max_length": '42027-姓名过长'})
# error_messages={"max_length": '42028-座右铭过长'}) motto = serializers.CharField(required=False, trim_whitespace=True, max_length=25, validators=[name_validate],
# error_messages={"max_length": '42028-座右铭过长'})
# # avatar = serializers.ImageField(validators=[validate_avatar]) # avatar = serializers.ImageField(validators=[validate_avatar])
#
# class Meta:
# model = Members
# fields = ('did', 'department_cn', 'grade', 'name', 'motto')
#
# def create(self, validated_data):
# return Members.objects.create(**validated_data)
#
# def update(self, instance, validated_data):
# instance.did = validated_data.get("did", instance.did)
# instance.department_cn = validated_data.get("department_cn", instance.department_cn)
# 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 MembersSerializer(serializers.ModelSerializer):
department = serializers.CharField(source="department.department_cn")
class Meta: class Meta:
model = Members model = Members
fields = ("id",'department', 'years', 'name', 'motto','avatar') fields = ('did', 'department', 'grade', 'name', 'motto')
extra_kwargs = { def create(self, validated_data):
"department": { return Members.objects.create(**validated_data)
"error_messages": {
"max_length": '42021-部门名称过长',
"blank": '41011-部门名称不能为空'
}
},
"grade": {
"error_messages": {
"max_value": '42025-年级数过大',
"blank": "41015-年级数不能为空",
"min_value": '42026-年级数过小'
}
},
"name": {
"error_messages": {
"blank": '41016-姓名不能为空',
"max_length": '42027-姓名过长'
}
},
"motto": {
"error_messages": {
"max_length": '42028-座右铭过长'
}
}
} 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.Serializer):
grade = serializers.IntegerField(required=True, min_value=2001, max_value=2022,
error_messages={"max_value": '42025-年级数过大', "blank": "41015-年级数不能为空",
"min_value": '42026-年级数过小'})
did = serializers.IntegerField(required=True, error_messages={"blank": '41010-部门ID不能为空', "invalid": '42020-类型错误'})
department = serializers.CharField(max_length=10, required=True, trim_whitespace=True,
validators=[validate_department],
error_messages={"max_length": '42021-部门名称过长', "blank": '41011-部门名称不能为空'})
# class Meta:
# model = History
# fields = ('grade', 'did', 'department')
#
# class HistorySerializer(serializers.Serializer): def create(self, validated_data):
# grade = serializers.IntegerField(required=True, min_value=2001, max_value=2022, return History.objects.create(**validated_data)
# error_messages={"max_value": '42025-年级数过大', "blank": "41015-年级数不能为空",
# "min_value": '42026-年级数过小'})
# did = serializers.IntegerField(required=True, error_messages={"blank": '41010-部门ID不能为空', "invalid": '42020-类型错误'})
# department = serializers.CharField(max_length=10, required=True, trim_whitespace=True,
# validators=[validate_department],
# error_messages={"max_length": '42021-部门名称过长', "blank": '41011-部门名称不能为空'})
#
# # class Meta:
# # model = History
# # fields = ('grade', 'did', 'department_cn')
# #
#
# def create(self, validated_data):
# return History.objects.create(**validated_data)
#
# def update(self, instance, validated_data):
# instance.department_cn = validated_data.get("department_cn", instance.department_cn)
# instance.grade = validated_data.get("grade", instance.grade)
# instance.did = validated_data.get("did", instance.did)
# instance.save()
# return instance
class HistorySerializer(serializers.ModelSerializer): def update(self, instance, validated_data):
department = serializers.CharField(source="department.department_cn") instance.department = validated_data.get("department", instance.department)
id = serializers.IntegerField(source="department.id") instance.grade = validated_data.get("grade", instance.grade)
class Meta: instance.did = validated_data.get("did", instance.did)
model = History instance.save()
fields = ('id', 'department') return instance
+2 -2
View File
@@ -1,10 +1,10 @@
from django.conf.urls.static import static from django.conf.urls.static import static
from ITShowPlatform import settings from ITShowPlatform import settings
from django.urls import path from django.urls import path
from apps.history.views import DepartmentMessageView, MemberViewSet, HistoryViewSet from apps.history.views import DepartmentViewSet, MemberViewSet, HistoryViewSet
urlpatterns = [ urlpatterns = [
path('department_info/', DepartmentMessageView.as_view()), path('department_cn/', DepartmentViewSet.as_view()),
path('member/', MemberViewSet.as_view()), path('member/', MemberViewSet.as_view()),
path('history/', HistoryViewSet.as_view()), path('history/', HistoryViewSet.as_view()),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
+75 -133
View File
@@ -1,166 +1,108 @@
from rest_framework.generics import GenericAPIView
from rest_framework.views import APIView from rest_framework.views import APIView
from apps.history import *
from rest_framework.response import Response from rest_framework.response import Response
from django.db.models import Q from django.db.models import Q
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from utils.util import get_msg
from django.views.decorators.csrf import csrf_protect
from apps.history.models import Members, History, Department from apps.history.models import Members, History, Department
from apps.history.serializers import MembersSerializer, HistorySerializer, DepartmentSerializer from apps.history.serializers import MembersSerializer, HistorySerializer, DepartmentSerializer
import configparser,os
from ITShowPlatform.settings import BASE_DIR,MEDIA_URL
conf = configparser.RawConfigParser()
conf.read(os.path.join(BASE_DIR, "config.ini"), encoding="utf-8")
# class DepartmentViewSet(APIView):
# # 获取部门信息
#@method_decorator(csrf_exempt)
# def get(self, request):
# response = {
# "code": 20000,
# "msg": "成功",
# }
# obj = Department.objects.all().filter(did=request.GET.get('did')).first() # 获取符合did的DepartmentObject
# # (默认每个部门只对应一个object)
# d = {'did': obj.did, 'department_cn': obj.department_cn, 'department_en': obj.department_en, 'content': obj.content,
# 'introduction': obj.introduction} # 将其转为字典类(用于放入serializer检验)
# serializer = DepartmentSerializer(data=d)
# if serializer.is_valid():
# response['data'] = serializer.data # 在data里返回想得到的信息
# return Response(data=response)
# key = list(serializer.errors.keys())[0] # 得到错误信息的keys中的第一个key
# # 用一个key得到一个错误信息,一个错误信息中的错误码与detail用“-”隔开, 通过split分开
# value = str(list(serializer.errors.get(key))[0]).split("-")
# response['code'] = int(value[0])
# response['msg'] = value[1]
# return Response(data=response)
#@method_decorator(csrf_exempt,name = "dispatch") class DepartmentViewSet(APIView):
class DepartmentMessageView(GenericAPIView): # 获取部门信息
"""获取部门信息"""
@method_decorator(csrf_exempt) @method_decorator(csrf_exempt)
#@csrf_protect_m
def get(self, request): def get(self, request):
queryset = Department.objects.all() response = {
"code": 20000,
"msg": "成功",
}
obj = Department.objects.all().filter(id=request.GET.get('did')).first() # 获取符合did的DepartmentObject
# (默认每个部门只对应一个object)
d = {'did': obj.id, 'department_cn': obj.department_cn, 'department_en': obj.department_en, 'content': obj.content,
'introduction': obj.introduction} # 将其转为字典类(用于放入serializer检验)
serializer = DepartmentSerializer(data=d)
if serializer.is_valid():
response['data'] = serializer.data # 在data里返回想得到的信息
return Response(data=response)
key = list(serializer.errors.keys())[0] # 得到错误信息的keys中的第一个key
# 用一个key得到一个错误信息,一个错误信息中的错误码与detail用“-”隔开, 通过split分开
value = str(list(serializer.errors.get(key))[0]).split("-")
response['code'] = int(value[0])
response['msg'] = value[1]
return Response(data=response)
if request.query_params:
try:
serializer = DepartmentSerializer(instance=queryset.get(id=request.query_params['id']))
department_data = dict(serializer.data)
department_data["background"] = conf.get("Django", "Host") + department_data["background"]
department_data["icon"] = conf.get("Django", "Host") + department_data["icon"]
return Response({"code": 20000, "msg": get_msg("20000"), "data": department_data})
except Department.DoesNotExist:
return Response({"code": 40000, "msg": "查询部门不存在"})
# except TypeError:
# return Response({"code": 40000, "msg": "查询部门不存在"})
else:
serializer = DepartmentSerializer(instance=queryset, many=True)
department_data = dict(serializer.data)
department_data["background"] = conf.get("Django", "Host") + department_data["background"]
department_data["icon"] = conf.get("Django", "Host") + department_data["icon"]
return Response({"code": 20000, "msg": get_msg("20000"), "data": department_data})
# print(request.query_params)
#@method_decorator(csrf_exempt,name = "dispatch")
class MemberViewSet(APIView): class MemberViewSet(APIView):
# 获取历史成员信息 # 获取历史成员信息
@method_decorator(csrf_exempt) @method_decorator(csrf_exempt)
#@csrf_protect
def get(self, request): def get(self, request):
response = { response = {
"code": 20000, "code": 20000,
"msg": "成功", "msg": "成功",
} }
years = request.GET.get('years') grade = request.GET.get('grade')
department_id = request.GET.get('department_id') did = request.GET.get('did')
try: queryset = Members.objects.all().filter(Q(department_id=did) & Q(grade=grade)) # 获得所有符合要求的object
queryset = Members.objects.all().filter(Q(department_id=department_id) & Q(years=years)) # 获得所有符合要求的object l = [] # 建一个列表用于存储最终输出的data
except Members.DoesNotExist:
response["code"] = 40000
response["msg"] = "查询部门不存在"
return Response(data=response)
serializer = MembersSerializer(instance=queryset, many=True)
for i in serializer.data:
i["avatar"] = (conf.get("Django","Host") + i["avatar"])
return Response({"code": 20000, "msg": get_msg("20000"), "data": serializer.data})
# l = [] # 建一个列表用于存储最终输出的data
# 对符合要求的每一个object都转为字典并通过serializer检验数据是否合法 # 对符合要求的每一个object都转为字典并通过serializer检验数据是否合法
# for x in queryset: for x in queryset:
# # avatar = str(x.avatar) avatar = str(x.avatar)
# # if avatar == '': if avatar == '':
# # avatar = "default/user.jpg" avatar = "default/user.jpg"
# # 将符合要求的一个object都转为字典 # 将符合要求的一个object都转为字典
# # d = {'id': x.id, 'department_id': x.department_id, 'grade': x.grade, 'department_cn': x.department_cn, 'motto': x.motto, d = {'id': x.id, 'did': x.did, 'grade': x.grade, 'department_cn': x.department_cn, 'motto': x.motto,
# # 'name': x.name, 'name': x.name,
# # 'avatar': avatar} # 将路径转为字符串格式 'avatar': avatar} # 将路径转为字符串格式
# serializer = MembersSerializer(data=x) serializer = MembersSerializer(data=d)
# #if serializer.is_valid(): if serializer.is_valid():
# l.append(d) # 将合法数据存入l列表中并继续进行下一个循环 l.append(d) # 将合法数据存入l列表中并继续进行下一个循环
# continue continue
# 若出现不合法数据则将错误信息返回前端 # 若出现不合法数据则将错误信息返回前端
# key = list(serializer.errors.keys())[0] # 得到错误信息的keys中的第一个key key = list(serializer.errors.keys())[0] # 得到错误信息的keys中的第一个key
# # 用一个key得到一个错误信息,一个错误信息中的错误码与detail用“-”隔开, 通过split分开 # 用一个key得到一个错误信息,一个错误信息中的错误码与detail用“-”隔开, 通过split分开
# value = str(list(serializer.errors.get(key))[0]).split("-") value = str(list(serializer.errors.get(key))[0]).split("-")
# response['code'] = int(value[0]) response['code'] = int(value[0])
# response['msg'] = value[1] response['msg'] = value[1]
# return Response(data=response) return Response(data=response)
# response['data'] = l response['data'] = l
# return Response(data=response) return Response(data=response)
#@method_decorator(csrf_exempt,name = "dispatch")
class HistoryViewSet(APIView): class HistoryViewSet(APIView):
# 获取历史列表 # 获取历史列表
@method_decorator(csrf_exempt) @method_decorator(csrf_exempt)
#@csrf_protect
def get(self, request): def get(self, request):
response = { response = {
"code": 20000, "code": 20000,
"msg": "成功", "msg": "成功",
} }
ser = History.objects.all().order_by("years") # 获取全部历史列表信息 history_list = History.objects.all() # 获取全部历史列表信息
# # 同上,对每一个object进行判断 # 同上,对每一个object进行判断
# for x in ser: for x in history_list:
# d = {'department_id': x.department_id, 'grade': x.grade, 'department_cn': x.department_cn} d = {'did': x.department_id, 'grade': x.grade, 'department_cn': x.department_cn}
# serializer = HistorySerializer(data=d) serializer = HistorySerializer(data=d)
# if serializer.is_valid(): if serializer.is_valid():
# continue continue
# key = list(serializer.errors.keys())[0] # 得到错误信息的keys中的第一个key key = list(serializer.errors.keys())[0] # 得到错误信息的keys中的第一个key
# # 用一个key得到一个错误信息,一个错误信息中的错误码与detail用“-”隔开, 通过split分开 # 用一个key得到一个错误信息,一个错误信息中的错误码与detail用“-”隔开, 通过split分开
# value = str(list(serializer.errors.get(key))[0]).split("-") value = str(list(serializer.errors.get(key))[0]).split("-")
# response['code'] = int(value[0]) response['code'] = int(value[0])
# response['msg'] = value[1] response['msg'] = value[1]
# return Response(data=response)
# # 若数据通过判断,则在此处将数据转为要求格式
data = []
msg = {}
if not ser:
response["code"] = 40000
response["msg"] = "查询部门不存在"
return Response(data=response) return Response(data=response)
for i in range(ser.last().years, ser.first().years - 1, -1): # 若数据通过判断,则在此处将数据转为要求格式
msg["years"] = i info = []
msg["data"] = HistorySerializer(instance=ser.filter(years=i), many=True).data for i in range(2002, 2022):
data.append(msg.copy()) data = {'grade': i}
msg.clear() y = []
# data[i] = HistorySerializer(instance=ser.filter(years=i), many=True).data for j in range(0, 6):
# y = [] try:
# a = History.objects.get(Q(department_id=j) & Q(grade=i))
# for j in range(0, Department.objects.count()): except History.DoesNotExist: # 若为空,则继续判断下一个部门
# try: continue
# a = History.objects.get(Q(department_id=j) & Q(years=i)) x = {'id': a.department_id, 'department_name': a.department_cn}
# except History.DoesNotExist: # 若为空,则继续判断下一个部门 y.append(x)
# continue data['data'] = y
# info.append(data)
# x = {'id': a.department_id, 'department_name': a.department_cn} response["data"] = info
# y.append(x) return Response(data=response)
# data['data'] = y
# info.append(data)
response["data"] = data
return Response(response)
-1
View File
@@ -1 +0,0 @@
+1 -4
View File
@@ -2,8 +2,5 @@ from django.contrib import admin
from .models import Works from .models import Works
# Register your models here. # Register your models here.
class WorksAdmin(admin.ModelAdmin): admin.site.register(Works)
list_display = ("grade","name","description","img")
admin.site.register(Works,WorksAdmin)
-2
View File
@@ -4,5 +4,3 @@ from django.apps import AppConfig
class WorksConfig(AppConfig): class WorksConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField' default_auto_field = 'django.db.models.BigAutoField'
name = 'apps.work' name = 'apps.work'
verbose_name = "历史作品管理"
+2 -3
View File
@@ -1,7 +1,6 @@
# Generated by Django 3.2.9 on 2022-05-15 12:15 # Generated by Django 3.2.5 on 2022-05-07 01:48
from django.db import migrations, models from django.db import migrations, models
import utils.ImageStorage
class Migration(migrations.Migration): class Migration(migrations.Migration):
@@ -19,7 +18,7 @@ class Migration(migrations.Migration):
('grade', models.IntegerField(verbose_name='年份')), ('grade', models.IntegerField(verbose_name='年份')),
('name', models.CharField(max_length=30, verbose_name='事件名称')), ('name', models.CharField(max_length=30, verbose_name='事件名称')),
('description', models.CharField(max_length=200, verbose_name='事件描述')), ('description', models.CharField(max_length=200, verbose_name='事件描述')),
('img', models.ImageField(blank=True, null=True, storage=utils.ImageStorage.ImageStorage(), upload_to='image', verbose_name='图片')), ('img', models.ImageField(blank=True, null=True, upload_to='image', verbose_name='图片')),
], ],
options={ options={
'verbose_name_plural': '部门作品', 'verbose_name_plural': '部门作品',
+2 -3
View File
@@ -1,7 +1,6 @@
# Generated by Django 3.2.5 on 2022-05-15 00:27 # Generated by Django 3.2.5 on 2022-05-05 21:57
from django.db import migrations, models from django.db import migrations, models
import utils.ImageStorage
class Migration(migrations.Migration): class Migration(migrations.Migration):
@@ -14,6 +13,6 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name='works', model_name='works',
name='img', name='img',
field=models.ImageField(blank=True, null=True, storage=utils.ImageStorage.ImageStorage(), upload_to='image', verbose_name='图片'), field=models.ImageField(blank=True, null=True, upload_to='image', verbose_name='图片'),
), ),
] ]
+2 -2
View File
@@ -1,5 +1,5 @@
from django.db import models from django.db import models
from utils.ImageStorage import ImageStorage
# Create your models here. # Create your models here.
@@ -10,4 +10,4 @@ class Works(models.Model):
grade = models.IntegerField(verbose_name="年份") grade = models.IntegerField(verbose_name="年份")
name = models.CharField(verbose_name="事件名称", max_length=30) name = models.CharField(verbose_name="事件名称", max_length=30)
description = models.CharField(verbose_name="事件描述", max_length=200) description = models.CharField(verbose_name="事件描述", max_length=200)
img = models.ImageField(verbose_name="图片", upload_to="image", null=True, blank=True,storage=ImageStorage()) img = models.ImageField(verbose_name="图片", upload_to="image", null=True, blank=True)
+13 -12
View File
@@ -1,20 +1,21 @@
from rest_framework import serializers from rest_framework import serializers
from .models import * from .models import *
from utils.util import get_msg
class WorksInfoSerializer(serializers.ModelSerializer): class WorksInfoSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Works model = Works
fields = '__all__' fields = '__all__'
# grade = serializers.CharField(label="年级", required=True) grade = serializers.CharField(label="年级", required=True)
# name = serializers.CharField(label="事件名称", max_length=30, required=True) name = serializers.CharField(label="事件名称", max_length=30, required=True)
# description = serializers.CharField(label="事件描述", max_length=200, required=True) description = serializers.CharField(label="事件描述", max_length=200, required=True)
# img = serializers.ImageField(label="图片", required=False) img = serializers.ImageField(label="图片", required=False)
#
# """用来校验传入年级是否符合规范""" """用来校验传入年级是否符合规范"""
# def validate_grade(self, value): def validate_grade(self, value):
# if not (2002 < value <= 2021): if not (2002 < value <= 2021):
# raise serializers.ValidationError(code='42006', detail={'msg': get_msg(42006), raise serializers.ValidationError(code='42006', detail={'msg': get_msg(42006),
# "code": '42006'}) "code": '42006'})
# return value return value
-16
View File
@@ -1,16 +0,0 @@
from django.db.models.signals import pre_save,pre_delete,post_init,post_save,pre_init
from django.dispatch import receiver
from .models import Works
# 修改时,保存图片并删除旧图
# @receiver(post_init, sender=Works)
# def file_path(sender, instance, **kwargs):
# instance._current_image = instance.image
@receiver(pre_save, sender=Works)
def delete_old_image(sender, instance, **kwargs):
print(instance.img)
instance.img.delete(save=True)
+13 -23
View File
@@ -6,42 +6,32 @@ from rest_framework.views import APIView
from rest_framework.response import Response from rest_framework.response import Response
from .models import Works from .models import Works
from .serializers import WorksInfoSerializer from .serializers import WorksInfoSerializer
from utils.util import get_msg,get_path from utils.get_msg import get_msg
import logging import logging
from rest_framework.generics import GenericAPIView
import configparser,os
from ITShowPlatform.settings import BASE_DIR,MEDIA_URL
from . import signals
conf = configparser.RawConfigParser()
conf.read(os.path.join(BASE_DIR, "config.ini"), encoding="utf-8")
# Create your views here. # Create your views here.
class Work(GenericAPIView): class Work(APIView):
"""获取社团历年的作品""" """获取社团历年的作品"""
def get(self, request): def get(self, request):
key = [] key = []
data = {"data": key} data = {"data": key}
for i in range(2022,2001,-1): for i in range(2002, 2022):
"""temp用来存储每个年级的作品,方便区分年级""" """temp用来存储每个年级的作品,方便区分年级"""
temp = {} temp = {}
#try: try:
works_set = Works.objects.filter(grade=i) works_set = Works.objects.filter(grade=i)
if works_set: if works_set:
serializer = WorksInfoSerializer(works_set, many=True) serializer = WorksInfoSerializer(works_set, many=True)
temp['grade'] = i temp['grade'] = i
temp['data'] = serializer.data temp['data'] = serializer.data
for i in temp['data']: data['data'].append(temp)
if i.get("img"): except Exception:
i["img"] = get_path() + i["img"] """如果没有查到数据"""
data['data'].append(temp) pass
# except Exception:
# """如果没有查到数据"""
# pass
if len(data['data']) == 0: if len(data['data']) == 0:
"""如果查找的数据为空""" """如果查找的数据为空"""
data['code'] = 45005 data['code'] = 45005
Binary file not shown.

Before

Width:  |  Height:  |  Size: 463 KiB

After

Width:  |  Height:  |  Size: 0 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 720 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 KiB

-2
View File
@@ -9,5 +9,3 @@ mysqlclient==2.1.0
pytz==2022.1 pytz==2022.1
simpleui==4.0.2 simpleui==4.0.2
zipp==3.8.0 zipp==3.8.0
Django-sslserver
xlwt
-16
View File
@@ -1,16 +0,0 @@
from django.core.files.storage import FileSystemStorage
from django.conf import settings
import os, time, random,hashlib
from django.http import HttpResponse
class ImageStorage(FileSystemStorage):
def __init__(self, location=settings.MEDIA_ROOT, base_url=settings.MEDIA_URL):
super(ImageStorage, self).__init__(location, base_url)
def _save(self, name, content):
ext = os.path.splitext(name)[1]
d = os.path.dirname(name)
md5hash = hashlib.md5((os.path.basename(name) + str(time.time())).encode("utf-8"))
fn = md5hash.hexdigest()
name = os.path.join(d, fn + ext)
return super(ImageStorage, self)._save(name, content)