发送到djangorestframework

时间:2016-03-15 02:27:00

标签: python json django curl django-rest-framework

我不得不使用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()),
)

我的问题:

  1. 我们使用NoSQL,以下行仍然有用吗?
  2. testItems = Test.objects.all()
  3. 在POST JSON请求中清空request.data。
  4. 无法在请求对象中获取任何json字符串 或者request.data!整个json似乎消失了 下降。试图使用Fiddler / Postman捕获并确保JSON发出
  5. 可以保存()被覆盖并执行自定义实现吗?怎么样?

1 个答案:

答案 0 :(得分:1)

我不了解NOSQL,但你可以在shell上测试它。我猜它可能有用。 关于request.data错误; request.data仅用于使用django rest框架上传文件。当你发布一个json时,它就在请求的主体中。在你看来,你应该做的是这样的事情:

from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
import json

@csrf_exempt
class TestView(APIView):

# your get request here.

    def post(self, request, format=None):
        body_unicode = request.body.decode('utf-8')
        data = json.loads(body_unicode)
        # Now, your json content is stores in data as a dictionary.
        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)

仅供参考,我使用序列化器来创建json,我不使用它来创建对象。因此,我不确定此版本%100是否有效。但我很确定我添加的2行将JSON转换为字典。如果序列化程序接受字典作为数据,它将起作用。