implemented PUT support for members and switched 404 to be a json response

This commit is contained in:
okalintu
2016-07-20 19:55:39 +03:00
parent 6dd3dcb31e
commit 284b9b7c30
2 changed files with 29 additions and 8 deletions
+7 -4
View File
@@ -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)
+22 -4
View File
@@ -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"}')