如何使用Django rest框架显示存储在媒体文件夹中的文件URL列表?

2024-10-02 02:39:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个django API,在这里我可以根据唯一的用户名上传图像(无需任何身份验证),然后可以向API提供用户名以列出为该用户名上传的所有图像。我正在使用\media\文件夹来存储图像

imgapi/models.py

class File(models.Model):
    file = models.FileField(blank=False, null=False)
    name = models.CharField(max_length=20, default='user')

imgapi/serializers.py

class FileSerializer(serializers.ModelSerializer):
    class Meta:
        model = File
        fields = ['file','name']

imgapi/views.py

class FileUploadView(APIView):
    parser_class = (FileUploadParser, MultiPartParser,)

    def post(self, request, *args, **kwargs):

      file_serializer = FileSerializer(data=request.data)

      if file_serializer.is_valid():
          file_serializer.save()
          return Response(file_serializer.data, status=status.HTTP_201_CREATED)
      else:
          return Response(file_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        

到目前为止,我可以上传一张带有用户名的图片。 它以这种形式给了我一个回应

{
    "file": "/media/photo_2020-06-06_02-55-54.png",
    "name": "testUser"
}

imgapi/url.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('upload/', include('imgapi.urls')),
    path('api/', include('imgapi.urls')),
]


if settings.DEBUG:
  urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

如何使用(例如)给定的链接检索用户名testUser的URL列表 https:\\localhost:8000\api\list\username=testUser

谢谢你否决了我的问题

我已经找到了一个有效的解决方案,我将更新我的答案。 我得到了上传&;过滤,两者都可以在views.py和url.py中进行少量编辑

更新了视图.py

class GetImageViewSet(viewsets.ModelViewSet):
    
    queryset = Image.objects.all()
    serializer_class = ImageSerializer
    
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['uploaded_by']

更新了url.py

router = routers.DefaultRouter()
router.register(r'item', GetImageViewSet, basename='item')

urlpatterns = [
    path('api/', include(router.urls)),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Tags: pathnamepy图像datasettingsmodelsstatus

热门问题