Я изучаю, как обслуживать временные файлы в Django, и даже после прочтения docs У меня возникли проблемы с его окончанием. Эти файлы динамически генерируются временно с пользовательского ввода.Как загрузить временный файл в Django?
def get_queryset(self):
gcode = "/home/bradman/Documents/Programming/DjangoWebProjects/3dprinceprod/fullprince/media/uploads/tmp/skull.gcode"
test_file = open(gcode, 'r')
response = HttpResponse(test_file, content_type='text/plain')
response['Content-Disposition'] = "attachment; filename=%s.gcode" % title
print (response)
return response
Код выше должен поместить мой файл временного GCode с моего сервера в объект HttpResponse, а функция возврата должна загрузить файл. Он даже замедляется, как при загрузке, но после его завершения нет файла.
This question предоставил большую часть полезной информации и this one был полезен, но я не могу заставить его работать и не знаю, как еще его проверить. Я не уверен, что переход на apache или что-то уместно, так как у меня есть проблемы с правами пользователя, и эти файлы сразу же удаляются после загрузки. Я проверил, что «gcode» - это url каталога, а gcode content_type должен быть текстовым/открытым. Итак, в основном, как я могу на самом деле загрузить мой ответ?
Edit1
Вот полный код, а не только проблемный участок.
class SubFileViewSet(viewsets.ModelViewSet):
queryset = subfiles.objects.all()
serializer_class = SubFilesSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
IsOwnerOrReadOnly,)
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
def get_queryset(self):
req = self.request
make = req.query_params.get('make')
model = req.query_params.get('model')
plastic = req.query_params.get('plastic')
quality = req.query_params.get('qual')
filenum = req.query_params.get('fileid')
hotend = req.query_params.get('hotendtemp')
bed = req.query_params.get('bedtemp')
if make and model and plastic and quality and filenum:
filepath = subfiles.objects.values('STL', 'FileTitle').get(fileid = filenum)
path = filepath['STL']
title = filepath['FileTitle']
gcode = TheMagic(
make=make,
model=model,
plastic=plastic,
qual=quality,
path=path,
title=title,
hotendtemp=hotend,
bedtemp=bed)
test_file = open(gcode, 'r')
response = HttpResponse(test_file, content_type='text/plain')
response['Content-Disposition'] = "attachment; filename=%s.gcode" % title
print (response.content)
return response
else:
print ('normal or non complete download')
return self.queryset
Я использую Django Rest Framework и пытается создать динамический ответ от моего API получить запрос реагировать на параметры, приведенные в URL. Поэтому я посылаю запрос на получение запроса, передавая переменные в качестве параметров, он создает файл на основе этих переменных и, наконец, отправляет обратно созданный файл. Все это уже работает, за исключением фактической загрузки файла в конце. Запрос get возвращает ошибку HTTP 500.
Каковы разрешения для файла gcode? Действительно ли django может открыть этот файл? – Igle
Django может открыть файл, мне нужно использовать класс разрешений API из Django Rest Framework. Пользователь должен иметь разрешение от уже выбранного класса разрешений. – RknRobin
Не могли бы вы поделиться своим классом разрешений и, возможно, отладочной трассой вызова конечной точки? – Igle