Django Rest Framework图像的常量URL

时间:2015-06-21 04:28:06

标签: django image api rest url

我希望我上传的所有图片都能进入/ media /所以我可以轻松地将网址重新路由到/ media /。一个例子是当我上传图像时,我将上传路径设置为/ images / credentials,所以我希望它保存到/ media / images / credentials /。它确实可以妥善保存。当用户上传图像时,它会转到我计算机上正确的/ media / images / credentials文件夹中。

但是,当API稍后提供该图像时(API位于/ api / v1 / members /凭据,它会转到http://127.0.0.1:8000/api/v1/members/credentials/images/credentials/。我想要做的是删除第一部分,即api / v1 / members / credentials。问题是它强制我的URL文件如下:

if base.DEBUG:
    urlpatterns += patterns('',
                            (r'^api/v1/members/credentials/(?P<path>.*)$', 'django.views.static.serve', {
                                'document_root': base.MEDIA_ROOT}))

仅适用于此API。但我想为所有API网址的所有图片添加一个urlpattern条目。我希望所有图像链接在返回给用户时不包含API部分,因此我不必为每个API创建单独的urlpattern条目。我有许多服务于图像的API,而不仅仅是/ credentials /.

模型是这样的:

class Credential(models.Model):
    """Used to store various credentials for member validation."""
    document_image = models.ImageField(
        upload_to=get_upload_path(instance="instance",
                                  filename="filename.ext",
                                  path='images/credentials/'))

设定:

MEDIA_ROOT = os.path.join(BASE_DIR, "sailistio", "media")

其他相关网址条目:

基本网址:

url(r'^api/v1/members/', include(members_urls, namespace="members")),

会员网址:

url(r'^credentials/$', views.UserCredentialList.as_view(), name='user-credential-list'),

感谢您的帮助!

编辑:

class UserCredentialList(generics.ListCreateAPIView):
    permission_classes = (IsCredentialOwnerOrAdmin,)
    serializer_class = CredentialSerializer

    """
    This view should return a list of all the purchases
    for the currently authenticated user.
    """

    def get_queryset(self):
        """
        This view should return a list of all models by
        the maker passed in the URL
        """
        user = self.request.user
        return Credential.objects.filter(member=user)

    def perform_create(self, serializer):
        serializer.save(member_id=self.request.user.id)

如果你需要它,这就是这个:

class CredentialSerializer(serializers.ModelSerializer):

    class Meta:
        model = Credential
        fields = (
            'id',
            'credential_type',
            'credential_number',
            'date_received',
            'is_verified',
            'date_verified',
            'document_image',
        )

    def is_valid(self, raise_exception=False):
        imageHandler = ImageHandler()
        self._kwargs["data"]["document_image"] = imageHandler.convertImage(self._kwargs["data"]["document_image"])
        return super(CredentialSerializer, self).is_valid()

1 个答案:

答案 0 :(得分:0)

简单回答......

我需要在基本配置文件中将'/ media /'设置为MEDIA_URL设置。