【发布时间】:2016-06-30 07:44:04
【问题描述】:
我一直坚持使用 django-rest-framework 进行简单的 RESTful 测试。我是新手。请帮忙。提前致谢!
版本:
django >= 1.9
djangorestframework 3.3.3
python 3.4.3
来自终端的 POST 请求
curl -H "Content-Type: application/json" -X POST -d '{"title":"xyz","desc":"xyz"}' http://localhost:3000/api/test/
django 的 settings.py
INSTALLED_APP = {
'app',
'rest_framework',
#....skip to keep it short
}
# did not set anything
<!-- language-all: lang-python -->
REST_FRAMEWORK = {
}
#models.py
class Test(object):
def __init__(self, title, desc):
self.title = title
self.desc = desc
serializers.py
from rest_framework import serializers
class TestSerializer(serializers.Serializer):
title = serializers.CharField()
desc = serializers.CharField(max_length=200)
class Meta:
model = Test
fields = ('title', 'desc')
views.py
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
@csrf_exempt
class TestView(APIView):
def get(self, request, format=None):
# 1. we use NoSQL, is the following line still work?
# testItems = Test.objects.all()
serializer = SnippetSerializer(testItems, many=True)
return Response(serializer.data)
def post(self, request, format=None):
# 2. Unable to get any json string in request object or request.data at all!
# 3. The entire json seems disappear and get dropped
serializer = TestSerializer(data=request.data)
if serializer.is_valid():
# 4. can save() be overrided and do custom implementation? How?
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
urls.py
from django.conf.urls import patterns, url
urlpatterns = patterns(
'app',
url(r'^api/business/$', app.views.TestView.as_view()),
)
我的问题:
- 我们使用 NoSQL,以下行是否仍然有效?
- testItems = Test.objects.all()
- POST JSON 请求中的 request.data 为空。
- 无法获取请求对象中的任何 json 字符串 或 request.data !整个 json 似乎消失并得到 掉了。尝试使用 Fiddler/Postman 捕获并确保确实发送了 JSON
- 能否覆盖 save() 并进行自定义实现?怎么样?
【问题讨论】:
标签: python json django curl django-rest-framework