On Jun 24, 2:47 pm, irum <irumrauf...@gmail.com> wrote:
> Hi,
> I am working on implementing a REST web service example of booking a
> hotel. It was supposed to be simple to start with but I am already
> badly stuck:)
>  I am stuck  with deserialization and serialization.  I want to create
> a new resource when PUT is requested on booking. My GET method works
> perfectly fine but I am stuck with PUT. My code on method PUT is:
>
> def do_PUT(self):
>        try:
>            deserialized = serializers.deserialize("json",
> self.request.raw_post_data)
>            put_book = list(deserialized)
>        except (ValueError, TypeError, IndexError):
>            response = HttpResponse()
>            response.status_code = 400
>            return response
>        for obj in put_book:
>            b1 = guest( fName = "hello", phone = 21, email =
> "t...@email")
>        b1.save()
>
>        json = serializers.serialize("json", b1)
>        response = HttpResponse(json, mimetype="application/json")
>        response.status_code = 201
>        response["Location"] = "/bookings/%s" % (b1.id)
>        return response
>
> Now when I send PUT request via curl, i.e.:
>
> curl -i -d "{'room_id': 21, 'payment_id': 21, 'guest_id': 21}" -X 
> PUThttp://127.0.0.1:8000/bookings/
>
> It gives me 400 error, i.e. HTTP/1.0 400 BAD REQUEST
> This means it is raising and exception and not able to deserialize the
> data.
>
> I tried removing   the statement:   put_book = list(deserialized) in
> try block. ie,
>
>  try:
>            deserialized = serializers.deserialize("json",
> self.request.raw_post_data)
>           # put_book = list(deserialized)
>        except (ValueError, TypeError, IndexError):
>            response = HttpResponse()
>            response.status_code = 400
>            return response
>        for obj in deserialized:
>            b1 = guest( fName = "hello", phone = 21, email =
> "t...@email")
>        b1.save()
>
>        json = serializers.serialize("json", b1)
>        response = HttpResponse(json, mimetype="application/json")
>        response.status_code = 201
>        response["Location"] = "/bookings/%s" % (b1.id)
>        return response
>
>  It then doesnt raises and exception but gives 500 error: HTTP/1.0 500
> INTERNAL SERVER ERROR
> .....
> ....
>  Exception Type: ValueError at /bookings/
> Exception Value: Expecting property name: line 1 column 1 (char 1)
> ....
> ...
> In line 1 of my views.py, I am just importing : from django.http
> import HttpResponse, HttpResponseNotAllowed, HttpResponseForbidden
> And there is no problem in this line, since my rest of the views
> perfectly fine if its not for this problem.
>
> Any help and input would be appreciated. I am stuck in this for last 2
> days and trying to fix it. I have googled extensively but still no
> clue.
>
> Thanks,
> Irum

The line1, column 1 refers to the JSON file, not the code. Your JSON
is not valid. Try putting it through a validator like 
http://jsonviewer.stack.hu/
to see what's wrong.

That said, if you want to create a RESTful API in Django, the work has
already been done for you: just use django-piston.
--
DR.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to