from django.shortcuts import render, get_object_or_404 from django.views.decorators.csrf import ensure_csrf_cookie from django.http import HttpResponse, HttpResponseBadRequest from django.core.exceptions import ValidationError from members.models import Member, MemberRequest import json @ensure_csrf_cookie def index(request, *args, **kwargs): return render(request, 'members_index.html',{}) @ensure_csrf_cookie def members(request, *args, **kwargs): mems = list(map(lambda m: m.get_dict(),Member.objects.all())) return HttpResponse(json.dumps(mems)) @ensure_csrf_cookie def member(request,*args, **kwargs): # get, put and delete together since all operate on existing objects if request.method in ['GET','PUT', 'DELETE']: # get object by id or give 404 idx = kwargs.pop("idx", None) try: mem = Member.objects.get(pk=idx) except Member.DoesNotExist: resp = HttpResponse('{"error":"object not found"}') resp.status_code = 404 return resp # delete object if requested if request.method == 'DELETE': try: mem.delete() return HttpResponse('{"status":"success"}') except: resp = HttpResponse('{"error" : "could not delete object"}') resp.status_code = 500 return resp # update model if request type was PUT if request.method == 'PUT': try: data = json.loads(request.body.decode("utf-8")) mem.update_from_dict(data) except ValueError: return HttpResponseBadRequest('{"error" : "Invalid parameters supplied"}') return HttpResponse(json.dumps(mem.get_dict())) if request.method == 'POST': try: data = json.loads(request.body.decode("utf-8")) memdict = Member.create_from_dict(data) return HttpResponse(json.dumps(mem.get_dict())) except ValueError: return HttpResponseBadRequest('{"error" : "Invalid parameters supplied"}') @ensure_csrf_cookie def member_requests(request, *args, **kwargs): reqs = list(map(lambda r: r.get_dict(),MemberRequest.objects.all())) return HttpResponse(json.dumps(reqs)) @ensure_csrf_cookie def new_member_request(request, *args, **kwargs): try: data = json.loads(request.body.decode("utf-8")) mem = Member.create_from_dict(data) req = MemberRequest.objects.create(member=mem) return HttpResponse(json.dumps(mem.get_dict())) except ValueError: return HttpResponseBadRequest('{"error" : "Invalid parameters supplied"}') @ensure_csrf_cookie def handle_mem_request(request, idx, *args, **kwargs): try: req = MemberRequest.objects.get(pk=idx) except MemberRequest.DoesNotExist: resp = HttpResponse('{"error":"object not found"}') resp.status_code = 404 return resp if request.method == 'DELETE': req.member.delete() else: # method == POST because other aren't allowed here req.delete() return HttpResponse('{"status":"success"}')