我有一个中间件,它根据请求修改请求对象
class MyMiddleware():
def process_request(self, request):
if request.path_info = "some special path":
request.some_special_attribute = True
return request
我有一个使用自定义序列化程序的资源
class MyResource(ModelResource):
name = fields.CharField("name")
class Meta:
serializer = MySerializer()
class MySerializer(Serializer):
def from_json(self, content):
if request.some_special_attribute:
# modify the object and return
并且序列化程序必须访问请求对象才能返回正确的响应对象
似乎没有办法做到这一点。
答案 0 :(得分:1)
我认为你混淆了资源的工作和序列化工作的工作。您不应该尝试在序列化程序中实现任何业务逻辑;它仅用于在json(或其他)和本机python数据结构之间进行转换。
“并且序列化程序必须访问请求对象才能返回正确的响应对象”。 资源就是为了做到这一点。
我建议阅读有关保湿和脱水数据的文档。 http://django-tastypie.readthedocs.org/en/latest/resources.html#advanced-data-preparation
以下是来自文档的示例,他们根据请求中的属性更改了请求正文。
class MyResource(ModelResource):
class Meta:
queryset = User.objects.all()
excludes = ['email', 'password', 'is_staff', 'is_superuser']
def dehydrate(self, bundle):
# If they're requesting their own record, add in their email address.
if bundle.request.user.pk == bundle.obj.pk:
# Note that there isn't an ``email`` field on the ``Resource``.
# By this time, it doesn't matter, as the built data will no
# longer be checked against the fields on the ``Resource``.
bundle.data['email'] = bundle.obj.email
return bundle