这些Django REST Framework序列化程序确实令人费解。
我有一个我已经解决过的情况,但是我想知道我提出的解决方案是否真的是最顺利的。
我的数据库中有一些产品信息。像往常一样,产品被称为产品ID。我当然希望产品ID可读,因此我实现了具有
的ModelSerializerread_only_fields = ('id',)
然后将这些ID和其他产品信息作为JSON传递给前端。我不希望发生的事情是,互联网上的未知人员能够向我发送任意产品ID和其他信息并将其放入我的数据库中,这就是为什么我将该字段设为read_only_field。< / p>
但是,我确实希望能够从前端接收有效的现有产品数据并将其反序列化为Python对象。因为ID字段是read_only_field,DRF会忽略它,并且ID永远不会被反序列化。所以我想我也希望这些序列化器也可写。只是不......太可写了。
我现在所做的是有点中间产品ProductSerializer,它既可读又可写,并且永远不会直接保存到数据库中。
或者我应该保持原始的ModelSerializer可读写但覆盖.is_valid()以检查我们是否正在处理现有的产品ID?
还有其他方法可以解决这个难题吗?
edit0:
所以我想要完成的是类似这些步骤:
通过dropzone.js
分析图像,确保图像正确,如果是,请根据图像属性发回带有产品推荐数组的JSON响应。此时,应该从数据库序列化产品数据。
用户选择数量和诸如此类别,然后将此产品信息发回。在这里,我将PUT用于当前称为&#39; / basket&#39;的终点。
将此信息反序列化回产品对象并构建各种购物车。这是我注意到这个问题的地方。恶意用户可以发送任意信息,所以我想确保不接受这样的伪造,并且只处理真正在DB中的产品。
答案 0 :(得分:1)
正如我所见,这是一个有点不同的问题。您唯一需要注意的是确保所有写入请求都需要授权。不应允许任何人向您的数据库添加任何内容,但对于具有适当权限的人。虽然拥有它们的人被认为是可信用户,但你不应该担心他们会向你的数据库发布不好的东西。
DRF包括令牌身份验证,会话身份验证以及您可以与auth methods一起使用的其他Permissions。您必须使权限系统保护所有POST,PUT和DELETE请求,否则您的API极易受到攻击。
如果我没记错的话,默认情况下,ModelSerializer上的主键是只读的。
答案 1 :(得分:0)
cd \