Files
web2.0-backend/members/views.py
T

99 lines
3.4 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 csv_import(request, *args, **kwargs):
data = request.body.decode("utf-8")
resp_data = Member.import_csv(data)
resp = HttpResponse(json.dumps(resp_data))
if resp_data['status'] == 'failure':
resp.status_code = 400
return resp
@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"}')