diff --git a/members/models.py b/members/models.py index e699b1c..9af8097 100644 --- a/members/models.py +++ b/members/models.py @@ -25,6 +25,11 @@ class Member(models.Model): @classmethod def create_from_dict(cls,d): + mbr = cls() + mbr.update_from_dict(d) + return mbr.get_dict() + + def update_from_dict(self,d): dmap = { 'first_name': 'first_name', 'last_name': 'last_name', @@ -33,14 +38,12 @@ class Member(models.Model): 'AYY': 'AYY', 'jas': 'jas', } - mbr = cls() for k,v in d.items(): try: - mbr.__setattr__(dmap[k],v) + self.__setattr__(dmap[k],v) except KeyError: pass - mbr.save() - return mbr.get_dict() + self.save() def __str__(self): return "{} {}".format(first_name, last_name) diff --git a/members/views.py b/members/views.py index 6b63d88..4d00fd7 100644 --- a/members/views.py +++ b/members/views.py @@ -1,5 +1,5 @@ from django.shortcuts import render, get_object_or_404 -from django.http import HttpResponse +from django.http import HttpResponse, HttpResponseBadRequest from django.core.exceptions import ValidationError from members.models import Member import json @@ -12,14 +12,32 @@ def members(request, *args, **kwargs): return HttpResponse(json.dumps(mems)) def member(request,*args, **kwargs): - if request.method == 'GET': + + #get and put together since both operate on existing objects and return one object + if request.method in ['GET','PUT']: + # get object by id or give 404 idx = kwargs.pop("idx", None) - mem = get_object_or_404(Member, pk=idx) + try: + Member.objects.get(pk=idx) + except Member.DoesNotExist: + resp = HttpResponse('{"error":"object not found"}') + resp.status_code = 404 + 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(memdict)) except ValueError: - raise ValidationError("Invalid parameters supplied") + return HttpResponseBadRequest('{"error" : "Invalid parameters supplied"}')