DjangoRestFramework序列化完整图片url

DRF图片默认序列化目录格式一般为media/xxx.png,但这不是url,没法直接访问,在前端还需要进行一次字符串拼接,十分麻烦。

serializer = CategorySerializer(category)
return Response(serializer.data, status=status.HTTP_200_OK)

如上面的代码,此时如果CategorySerializer中有图片资源,那么序列化出来就会是这种形式:media/web/6/img/10b5319a.jpg

若要改成url格式的话,需做如下修改:

serializer = CategorySerializer(category, context={'request': request})
return Response(serializer.data, status=status.HTTP_200_OK)

增加一个context,其中的request值就是该次请求的request,如果使用APIView的方式,那么只需要在方法中加入request参数就可以获取到了,如下:

class GetCategoryView(APIView):
    def get(self, request):
        category = Category.objects.all().first()
        if category:
            serializer = CategorySerializer(category, context={'request': request})
            return Response(serializer.data, status=status.HTTP_200_OK)

这样返回的图片地址就是url的格式了

 

Django Rest Framework (DRF)是一个强大的用于构建RESTful Web服务的库,它与Django框架紧密结合,使得在Django项目中处理API更容易。当涉及到上传图片时,DRF本身并不直接提供图片上传的功能,但它可以配合第三方库如`django-file-upload`、`rest_framework.parsers`或`rest_framework_gis`等来实现。 要在DRF中处理图片上传,你需要做以下几步: 1. **安装依赖**: 使用pip安装所需的文件上传库,例如`djang-storages` 和 `django-file-storage-backends`(如S3、FTP等)。 ```bash pip install django-storages boto3 ``` 2. **配置存储设置**: 在settings.py中添加相应的存储配置,比如Amazon S3: ```python DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' AWS_ACCESS_KEY_ID = '<your_access_key>' AWS_SECRET_ACCESS_KEY = '<your_secret_key>' AWS_STORAGE_BUCKET_NAME = '<your_bucket_name>' AWS_DEFAULT_ACL = None ``` 3. **模型字段**: 在你的模型中添加一个`FileField`或`ImageField`来表示图片。 4. **序列化器**: 使用`rest_framework serializers.ImageField` 或 `rest_framework.serializers.ImageField(max_length=...)` 来序列化和反序列化文件字段。 5. **视图和API**: 在视图中接收POST请求,并通过`request.FILES`获取上传的图片数据。然后你可以将其保存到数据库或云存储中,同时更新你的API响应。 6. **URL配置**: 创建一个URL pattern指向处理图片上传的视图。 ```python from rest_framework import generics from .serializers import ImageSerializer class ImageView(generics.CreateAPIView): queryset = YourModel.objects.all() serializer_class = ImageSerializer ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

什么都干的派森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值