from rest_framework.views import APIView
from rest_framework.response import Response
from .serializers import HomeWorkUpSerializer, HomeWorkInfSerializer, HomeWorkSerializer, HomeWorkCreateSerializer, \
DoneListSerializer
from common.common import get_first_error
from .models import HomeWorkInfModel, HomeWorkMembersModel
from datetime import datetime
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from django.http import QueryDict, FileResponse
import os
from group.models import GroupModel, GroupMembersModel
import pytz
class CsrfExemptSessionAuthentication(SessionAuthentication):
def enforce_csrf(self, request):
return
class HomeWorkView(APIView):
authentication_classes = (CsrfExemptSessionAuthentication, BasicAuthentication)
def post(self, request):
context = dict()
user = request.user
if user.is_anonymous:
context['err_code'] = 1001
context['error'] = "您还未登录"
return Response(context)
data = HomeWorkUpSerializer(data=request.POST)
if not data.is_valid(): # 验证有效性
errors = data.errors
key, value = get_first_error(errors)
context['error'] = key + ' ' + value[0]
context['err_code'] = 2002
return Response(context)
else:
context['err_code'] = 0
data = data.data
end_time = data['end_time']
groups = request.POST.get('groups')
if groups is None or len(groups) == 0:
context['error'] = "至少选择一个小组"
context['err_code'] = 2002
return Response(context)
groups = str(groups)
groups = groups.split(',')
groups_int = list()
try:
for group in groups:
group = int(group)
groups_int.append(group)
except:
context['error'] = "小组id只能为int"
context['err_code'] = 2002
return Response(context)
for group_id in groups_int:
group = GroupModel.objects.filter(id=group_id)
if not group.exists():
context['error'] = "添加了无效的小组"
context['err_code'] = 4004
return Response(context)
group = group.first()
if user == group.owner:
continue
if not GroupMembersModel.objects.filter(user=user, group__id=group_id).exists():
context['error'] = "添加了无效的小组"
context['err_code'] = 4004
return Response(context)
if not group.member_can_use:
context['error'] = "添加了无效的小组"
context['err_code'] = 4004
return Response(context)
homework = HomeWorkInfModel.objects.create(name=data['name'],
type=data['type'],
subject=data['subject'],
remark=data.get('remark') if data.get('remark') else '',
owner=user,
member_can_know_donelist=True if data[
'member_can_know_donelist'] == 'true' else False,
member_can_see_others=True if data[
'member_can_see_others'] == 'true' else False,
can_submit_after_end=True if data[
'can_submit_after_end'] == 'true' else False,
end_time=datetime(year=int(end_time[0:4]),
month=int(end_time[5:7]),
day=int(end_time[8:10]),
hour=int(end_time[11:13]),
minute=int(end_time[14:16])
),
)
for group_id in groups_int:
homework.groups.add(group_id)
context['data'] = dict()
context['data']['id'] = homework.id
return Response(context)
def get(self, request):
context = dict()
user = request.user
if user.is_anonymous:
context['err_code'] = 1001
context['error'] = "您还未登录"
return Response(context)
id = request.GET.get('id')
if id is None: # 验证有效性
context['error'] = "没有请求的作业id"
context['err_code'] = 2002
return Response(context)
else:
try:
id = int(id)
except:
context['err_code'] = 2002
context['error'] = "参数格式不正确"
return Response(context)
querys = HomeWorkInfModel.objects.filter(id=id)
if not querys.exists(): # 请求数据不存在
context['err_code'] = 4004
context['error'] = "无法找到您要的数据"
return Response(context)
query = querys.first()
is_member = HomeWorkMembersModel.objects.filter(owner=user, work__id=id).exists()
is_owner = (user == query.owner)
if not is_member and not is_owner:
context['err_code'] = 4003
context['error'] = "您无权查看此内容"
return Response(context)
context['err_code'] = 0
context['data'] = HomeWorkInfSerializer(query).data
if is_owner:
context['data'].update({'is_creater': True})
else:
context['data'].update({'is_creater': False})
return Response(context)
def put(self, request):
context = dict()
user = request.user
if user.is_anonymous:
context['err_code'] = 1001
context['error'] = "您还未登录"
return Response(context)
put_data = QueryDict(request.body)
data = HomeWorkUpSerializer(data=put_data)
if not data.is_valid(): # 验证有效性
errors = data.errors
key, value = get_first_error(errors)
context['error'] = key + ' ' + value[0]
context['err_code'] = 2002
return Response(context)
else:
context['err_code'] = 0
data = data.data
end_time = data['end_time']
id = put_data.get('id')
if id is None:
context['error'] = "没有请求的作业id"
context['err_code'] = 2002
return Response(context)
try:
id = int(id)
except:
context['err_code'] = 2002
context['error'] = "参数格式不正确"
return Response(context)
querys = HomeWorkInfModel.objects.filter(id=id)
if not querys.exists(): # 请求数据不存在
context['err_code'] = 4004
context['error'] = "无法找到您要的数据"
return Response(context)
query = querys.first()
if user != query.owner:
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于django的作业管理系统.zip (30个子文件)
HomeWork-master
group
__init__.py 43B
tests.py 60B
admin.py 677B
serializers.py 3KB
apps.py 110B
models.py 2KB
views.py 13KB
main.ini 137B
manage.py 664B
common
__init__.py 0B
common.py 374B
work
__init__.py 76B
tests.py 60B
admin.py 881B
serializers.py 3KB
apps.py 110B
models.py 3KB
views.py 27KB
HomeWork
__init__.py 0B
wsgi.py 393B
urls.py 2KB
settings.py 4KB
asgi.py 393B
login
__init__.py 0B
tests.py 60B
admin.py 128B
serializers.py 2KB
apps.py 117B
models.py 61B
views.py 5KB
共 30 条
- 1
资源评论
我慢慢地也过来了
- 粉丝: 6961
- 资源: 4009
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功