BAE BAE - 24 days ago 14
Python Question

Django: if url not end with slash, POST works like GET

urls.py

url(r'^v1/files/$', MyFileView.as_view(), name='api-upload'),
url(r'^v1/files/$', MyFileView.as_view(), name='api-view-all'),


views.py

class MyFileView(APIView):
def post():
pass
def get():
pass


My question is: why
POST api/v1/files
works like
GET api/v1/files/
? I thought
POST api/v1/files
should return 404. Anything wrong?

UPDATE

But
api/v1/files/<id>
does not have this issue.
api/v1/files/<id>/
will return 404.
Thanks

Answer

I think that they don't "work like GET".

What is really happening is that:

  • you send a POST url
  • the server replies with a HTTP 302 to url/
  • and the browser performs a GET url/.

And the result of that is what you actually see.

If you check the requests being actually sent along the wire, I suspect you'll see two requests - the first being the POST, the second being the GET.

Comments