from django.shortcuts import render from django.http import HttpResponse, JsonResponse from django.views.decorators.csrf import csrf_exempt import datetime from channels.layers import get_channel_layer from asgiref.sync import async_to_sync from polls.decorators import polls_login_required from polls.models import Message, Task, TaskAddition from polls.tasks import process_task from django.core.exceptions import ObjectDoesNotExist from polls.utils import model_to_dict, queryset_to_list @csrf_exempt @polls_login_required def tasks(request): if request.method == 'POST': return HttpResponse(status=405) id = request.user.id tasks = Task.objects.filter(created_by__id=id) results = [] for o in tasks: result = dict() result['id'] = o.id m = [] for g in o.groups: n = model_to_dict(g, ['id', 'name']) m.append(n) result['groups'] = m result['added'] = o.added.strftime("%Y-%m-%d %H:%M:%S") results.append(result) return JsonResponse(results, safe=False) @csrf_exempt @polls_login_required def create_task(request): if request.method == 'GET': return HttpResponse(status=405) user = request.user content = request.POST.get('content') if not content: return JsonResponse({'status': 'error', 'message': '内容不能为空'}) groups = request.POST.getlist('groups', []) task = Task.objects.create(created_by=user, content=content) task.add_groups(groups) url = request.POST.get('url') print(groups, content, url) file = request.FILES.get('file') picture = request.FILES.get('picture') if url: urlAddtion = TaskAddition.objects.create( task=task, category=0, url=url) if file: fileAddtion = TaskAddition.objects.create( task=task, category=1, file=file) if picture: pictureAddtion = TaskAddition.objects.create( task=task, category=2, image=picture) for group in groups: normalMessage = Message.objects.create( type=0, send_from_id=user.id, send_to_id=group, task=task, content=content) return JsonResponse({'status': 'success'}) @csrf_exempt def create_test_task(request): if request.method == 'GET': return HttpResponse(status=405) channel_layer = get_channel_layer() async_to_sync(channel_layer.group_send)( "testroom", {"type": "chat.message", "message": "helo"}) return JsonResponse({'status': 'success'})