python - Django-rest-framework 如何验证 JSON 对象(不是 JSON 值)
问题描述
我目前正在尝试在models.py中仅使用数据字段进行发布请求:
class Filter(models.Model):
class Meta:
verbose_name_plural = "Filter"
verbose_name = "Filter"
db_table= "listing_filter"
data = JSONField(default={})
user = models.ForeignKey('backend.user', on_delete=models.CASCADE)
我有以下序列化程序,我在 drf 文档文档之后使用 JSONField :
class FilterSerializer(serializers.ModelSerializer):
data = serializers.JSONField(required=True)
user = serializers.CharField(required=False)
class Meta:
model = Filter
fields = ('__all__')
并在 APIView 中使用它:
class FilterView(APIView):
def post(self, request):
login_user = request.user
received_json_data=json.loads(request.body)
valid_ser = FilterSerializer(data=received_json_data)
if valid_ser.is_valid():
post_data = received_json_data["data"]
filter = Filter.objects.create(data=post_data, user=login_user)
filter.save()
return JsonResponse({'code':'200','data': filter.id}, status=200)
else:
return JsonResponse({'code':'400','errors':valid_ser.errors}, status=400)
当我在正文中发送以下数据时,它起作用并保存了对象:
{
"data": {
"http://example.org/about": {
"http://purl.org/dc/terms/title": [
{
"type": "literal",
"value": "Anna's Homepage"
}
]
}
}
}
但是当我将数据作为字符串(不是 json 对象)发送时,它仍然保存,我该如何防止这种情况?
{
"data" : "abc"
}
解决方案
推荐阅读
- python - 将简单的 Web 应用程序部署到 Elastic Beanstalk 时没有名为“应用程序”的模块错误
- graphql - 如何使用 Strapi GraphQL 返回 Stripe 优惠券
- amazon-web-services - SQS 单个请求处理多个消息
- c# - c# linq to list - 2 个具有相同字段名称和结果但只有 1 个与 json() 一起使用的列表?
- rust - Rust:如何限制派生特征的类型参数
- c# - GroupBy HashSet 不分组,而 SetEquals 为真
- javascript - 在 React PWA 中永远不会触发来自外部 JS 脚本的窗口 onload 事件
- sql - 无法获取相关表列的名称
- python - 使用 Pandas read_csv() 处理开头以“sep=”开头的 .csv 文件
- java - 使用流从 Map 中的 Map 获取数据