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, Notice, Task, TaskAddition from polls.tasks import process_task from django.core.exceptions import ObjectDoesNotExist from polls.utils import model_to_dict, queryset_to_list, parse @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.all(): n = model_to_dict(g, ['id', 'name']) m.append(n) result['groups'] = m result['content'] = o.content result['added'] = o.added.strftime("%Y-%m-%d %H:%M:%S") results.append(result) return JsonResponse({'status': 'success', 'message': results}, safe=False) @csrf_exempt @polls_login_required def create_task(request): if request.method == 'GET': return HttpResponse(status=405) user = request.user profile = user.userprofile_set.first() 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) task.add_task_message(user.id) 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) og_title, og_description, og_url, og_image = parse(url) print(og_title, og_description, og_url, og_image) task.add_url_message( user.id, og_title, og_description, og_url, og_image) if file: fileAddtion = TaskAddition.objects.create( task=task, category=1, file=file) if picture: pictureAddtion = TaskAddition.objects.create( task=task, category=2, image=picture) return JsonResponse({'status': 'success'}) @csrf_exempt @polls_login_required def get_task(request): if request.method == 'POST': return HttpResponse(status=405) id = request.user.id task_id = request.GET.get('task_id') if not task_id: return JsonResponse({'status': 'error', 'message': '参数错误'}) task = Task.objects.get(id=task_id) result = dict() result['id'] = task.id m = [] for g in task.groups.all(): n = model_to_dict(g, ['id', 'name']) m.append(n) result['groups'] = m result['content'] = task.content result['total'] = task.total() result['record'] = task.record() result['added'] = task.added.strftime("%Y-%m-%d %H:%M:%S") return JsonResponse({'status': 'success', 'message': result}) @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'})