Как отправить обратно загруженный файл через HTTP-запрос в Django? - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь реализовать функцию загрузки файла из внешнего интерфейса и сохранения в моем бэкэнде Django.Но я застрял, когда пытался извлечь свой файл из моего бэкэнда, он буквально просто возвращал путь к файлу, который я сохранил, но я не могу получить его, используя этот путь или используя HTTP.GET с этим URL.

model.py

class User(models.Model):
    name = models.CharField(max_length=50)
    image= models.FileField(upload_to='image/', default=None)
    intro= models.FileField(upload_to='info/', default=None) 

view.py

class UserViewSet(viewsets.ModelViewSet):
    serializer_class = LsRequestSerializer
    queryset = User.objects.all()
    http_method_names = ['post']

serializers.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
         model = User
         field = '__all__'

    def create(self, validated_data):
     newUser = User.objects.create(
         name = validated_data['name']
         image = None
         intro = None
     )
     try validate_data['image']:
        newUser.image = validate_data['image']
     except:
        newUser.image = None

     try validate_data['intro']:
        newUser.image = validate_data['intro']
     except:
        newUser.intro= None
     newUser.save()

     return newUser

Это оригинальный код, который можно использовать для успешной загрузки файла, и как только я отправлю запрос HTTP.POST, файл будет находиться в папке мультимедиа.

Однако, похоже, потому что в моей базе данных MySQL он только сохраняет путь к файлу в виде строки, его нельзя открыть.

Поэтому я попытался открыть файл и сохранить его на своем объекте, прежде чем вернуться обратно, но он выдал ошибку Can't convert 'FieldFile' object to str implicitly

print(MEDIA_ROOT)
print(newUser.image)
f = open(MEDIA_ROOT + newUser.image, 'rb')
newUser.image = f
return newUser

Это потому, что мне нужно установить тип содержимогов моем заголовке http как «обычный текст»?

Кроме того, как мне изменить файл view.py, чтобы получать эти файлы, когда я возвращаю всех существующих пользователей?

Могу ли я отослать весь объект обратно с некоторыми из них как строковое поле, в то время как другие являются файлами?

Каким будет выход?

...