我已经开始尝试使用Django REST框架。到目前为止,我已经成功地为我的对象创建了一个序列化程序,通过Javascript的$
.post()创建了发布视图,发布对象和返回对象。因此,现在我可以在JSON和Django模型对象之间进行适当的转换。
问题是我有一个对象数组[A1,A2,…,An]。现在,当我需要发布这样的数组时,我逐个对象地进行处理。是否有可能一次发布整个数组,并在Django视图中恢复对象数组?如果是这样,这里遵循的模式是什么?我想我可以定义一个新模型,该模型是当前模型的数组,为其创建一个序列化器,依此类推,但这似乎不太优雅。
下面是我的视图和序列化器:
#serializers.py
class SearchRequestSerializer(serializers.ModelSerializer):
def create(self):
return SearchRequest(**self.validated_data)
class Meta:
model = SearchRequest
#views.py
@api_view(['POST'])
def post_calculation(request):
if request.method == 'POST':
#JSON to serializer object
serializer = SearchRequestSerializer(data=request.data, many=False)
if (serializer.is_valid() == False):
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
#create the Python object
search_request = serializer.create()
#-- I do some processing stuff with the search_request object here ---
#object back to JSON
serializer3 = SearchRequestSerializer(search_request, many=False)
return Response(serializer3.data)
有两种解决方案来解决您的问题:
.create()
视图的方法默认情况下,django rest框架假定您将其传递给单个对象。要考虑将其传递给对象列表的可能性,可以按以下方式重写它:
def create(self, request, pk=None, company_pk=None, project_pk=None):
is_many = True if isinstance(request.data, list) else False
serializer = self.get_serializer(data=request.data, many=is_many)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
现在,您的视图将处理POST
数据中的单个对象以及对象列表。
django-rest-framework-bulk
提供上述功能以及其他功能(例如,批量更新)。您可以签出并确定它是否满足您的需求。
为了使其与基于函数的视图一起使用,方法是相似的:
@api_view(['POST'])
def post_calculation(request):
if request.method == 'POST':
is_many = True if isinstance(request.data, list) else False
# JSON to serializer object
serializer = SearchRequestSerializer(data=request.data, many=is_many)
if (serializer.is_valid() is False): # use `is False` syntax rather than `== False` in Python
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
serializer.save()
#-- do some processing stuff here ---
return Response(serializer.data)
不要.create()
直接调用方法,.save()
而是使用。另外,many=False
在序列化程序上使用时,可以在下找到创建的实例serializer.instance
。我不确定如何获取已创建实例的列表。您可以尝试相同的方法serializer.instance
。如果它不起作用,请尝试查找如何获得它。
我用的是Kafka普勒。send()方法将记录发布到Kafka。这是一种异步方法。我的申请将向Kafka发布大约2万张唱片。在成功发送大约10k条记录后,我多次收到超时异常。我增加了一批。大小和逗留。ms减少了问题,但有时我仍然会遇到超时异常。有没有办法一次只发送10k条记录,等待它们完成,然后再发送下一批记录??我不想通过使用send使其同步。get()因为这会让它变得非常慢。这是我得到的例外。
问题内容: 我正在尝试将JSON发布到WCF服务。json对象包含一个数组。我想知道如何正确绑定到我的数据合同。如果有人可以在这里给我指点,我将不胜感激。目前,我的购物车对象为null 我的服务界面如下所示: 我的客户电话如下 客户电话 我的JSON看起来像这样 问题答案: Fiddler对WCF REST方法的原始请求应如下所示: JSON中的响应如下所示:
问题内容: 我正在尝试使用RestSharp发布以下JSON: 我想我已经接近了,但是我似乎在为 SecurityQuestion 苦苦挣扎(API抛出错误,表明缺少参数,但没有说明是哪个参数) 这是我到目前为止的代码: 我的安全问题类如下所示: 谁能告诉我我在做什么错?还有其他方法可以发布安全性问题对象吗? 非常感谢。 问题答案: 您需要在标题中指定content-type: 还根据方法添加到P
我正在做一个项目,我请求一个api发布一个项目的详细信息。下面是我试图使用HttpRequest插入body itemstr的代码 这是我的newItem类 我试图将itemStr作为一个主体发布到本地运行的restful API。我可以使用GET请求检索,但不能发布。
我需要以这种格式发布一个对象: 我试过: 但是服务器返回了一个错误的请求。我认为数据的格式无效。 如何更改代码以将数据转换为正确的格式? 谢谢你!
问题内容: 我正在使用Symfony 2开发一个项目,我已经建立了一个捆绑包来处理我的所有数据库服务,这些服务来回传递JSON数据。 我的问题/问题: 是否可以发布简单的JSON对象?目前,我通过给对象起一个名字来欺骗我的ajax调用的普通表单帖子,如果我不给它起一个名字,我似乎无法从Symfony请求对象中获取数据。 我希望能够使用一个服务包来处理来自AJAX调用或常规Symfony形式的数据。