90 lines
3.1 KiB
Python
90 lines
3.1 KiB
Python
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"))
|
|
mem = 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"}')
|
|
|