from django.shortcuts import render from django.http import HttpResponse, JsonResponse from django.views.decorators.csrf import csrf_exempt from django.apps import apps import datetime from polls.decorators import polls_login_required from polls.models import Notice from django.core.exceptions import ObjectDoesNotExist @csrf_exempt @polls_login_required def notices(request): if request.method == 'POST': return HttpResponse(status=405) id = request.user.id notices = Notice.objects.filter(user__id=id, is_read=False) results = [] for o in notices: result = dict() result['id'] = o.id result['type'] = o.type 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 notice_top(request): if request.method == 'POST': return HttpResponse(status=405) id = request.user.id notices = Notice.objects.filter(user__id=id, is_read=False)[:10] results = [] for o in notices: result = dict() result['id'] = o.id result['type'] = o.type 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 read_notice(request): if request.method == 'GET': return HttpResponse(status=405) id = request.user.id notice_id = request.POST.get('notice') if not notice_id: return JsonResponse({'status': 'error', 'message': '通知ID错误'}) try: notice = Notice.objects.get(id=notice_id) notice.is_read = True notice.save() return JsonResponse({'status': 'success'}) except ObjectDoesNotExist: return JsonResponse({'status': 'error', 'message': '通知ID错误'}) @csrf_exempt @polls_login_required def detail_notice(request, notice_id): if request.method == 'GET': return HttpResponse(status=405) notice_id = request.POST.get('notice') if not notice_id: return JsonResponse({'status': 'error', 'message': '通知ID错误'}) try: notice = Notice.objects.get(id=notice_id) results = dict() results['id'] = notice.id results['category'] = notice.type results['content'] = notice.content results['app'] = notice.app results['model'] = notice.model results['field'] = notice.field results['record_id'] = notice.record_id results['record_pass_value'] = notice.record_pass_value results['record_reject_value'] = notice.record_reject_value results['added'] = notice.added.strftime("%Y-%m-%d %H:%M:%S") result['updated'] = notice.updated.strftime("%Y-%m-%d %H:%M:%S") return JsonResponse({'status': 'success', 'message': results}) except ObjectDoesNotExist: return JsonResponse({'status': 'error', 'message': '通知ID错误'}) @csrf_exempt @polls_login_required def reply_notice(request): if request.method == 'GET': return HttpResponse(status=405) id = request.user.id notice_id = request.POST.get('notice_id') if not notice_id: return JsonResponse({'status': 'error', 'message': '通知ID错误'}) try: notice = Notice.objects.get(id=notice_id) ReplyModel = apps.get_model(notice.app, notice.model) m = ReplyModel.objects.get(pk=notice.record_id) setattr(m, notice.field, notice.record_value) m.save(update_fields=[notice.field]) return JsonResponse({'status': 'success'}) except ObjectDoesNotExist: return JsonResponse({'status': 'error', 'message': '通知ID错误'})