我正在使用Django构建一个Web应用程序,它几乎只用作API服务器。我有一个连接到它的单页应用程序以及一个Android客户端。我需要修改一些传入的POST请求。
我的两个用例:
if request.data["avatar"] is None: <use default>
date_time = 1473387225
,我想将其转换为DateTime对象。现在,我已经为某些POST参数做了类似的事情。我现在的方式是在我的通用post()
的{{1}}函数中我将直接修改请求对象,然后使用该新请求对象调用ListCreateApiView
。这是正确的方法,还是有更好的方法来做到这一点?
谢谢!
答案 0 :(得分:0)
如果您使用的是django-rest-framework,可以通过serializers完成这些操作。
对于avatar
,请使用带有默认值的URLField。
对于时间戳,您应该创建一个custom field。
答案 1 :(得分:0)
查看此网站:http://www.cdrf.co这是一个易于浏览的显示,可以显示给定班级上的所有可用方法。您只需使用此选项覆盖您正在使用的视图即可。如果是模型ViewSet,您可能需要perform_create
和perform_update
。
我经常做这样的事情:
class SomeViewSet(viewsets.ModelViewSet):
queryset = SomeModel.objects.all()
serializer_class = SomeModelSerializer
def perform_create(self, serializer):
data = self.request.data
# make some changes to self.request here
serializer.save(
#change some things here
field='some new value'
)
答案 2 :(得分:0)
您可以通过多种方式执行此操作。作为验证的一部分,或在请求序列化程序的to_internal_value
中或在自定义字段序列化程序中。
这里有一个作为自定义字段序列化程序一部分的示例。
class AccountCreationSerializer(serializers.Serializer):
avatar = AvatarField(
required=False
allow_files=True
)
# Custom Field Serializer
class AvatarField(serializers.FilePathField):
def to_internal_value(self, value):
user_defined_path = super(AvatarField, self).to_internal_value(value)
if user_defined_path:
return user_defined_path
return default_path