Я создаю функцию API, которая позволяет клиенту отправлять запрос GET с параметрами URL, сервер получает и обрабатывает файл на основе данной информации и возвращает пользовательский файл. Хорошая новость - это все шаги, которые работают независимо!Как я могу вернуть HttpResponse с Django Rest Framework?
Я смог получить все, что работает внутри функции def get_query
кроме, возвращая HttpResponse. Функция требует ответа Queryset (имеет смысл, я думаю ..). Я решил, что мне нужна другая функция, чтобы я мог вернуть HttpResponse, поэтому я создал def send_file
. Я не уверен, как назвать эту функцию, и сейчас она просто пропускает ее.
views.py.
class SubFileViewSet(viewsets.ModelViewSet):
queryset = subfiles.objects.all()
serializer_class = SubFilesSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
IsOwnerOrReadOnly,)
def send_file(self, request):
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']
'''
#Live processing (very slow)
gcode = TheMagic(
make=make,
model=model,
plastic=plastic,
qual=quality,
path=path,
title=title,
hotendtemp=hotend,
bedtemp=bed)
'''
#Local data for faster testing
gcode = "/home/bradman/Documents/Programming/DjangoWebProjects/3dprinceprod/fullprince/media/uploads"
test_file = open(gcode, 'r')
response = HttpResponse(test_file, content_type='text/plain')
response['Content-Disposition'] = "attachment; filename=%s" % title
print (response)
return response
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')
return self.queryset
#function proved in here then removed and placed above
#get_query required a queryset response
У меня есть небольшой опыт работы с Django Framework Rest, и я не уверен, если есть лучший способ осуществить это, или как я мог бы вызвать функцию def send_file
?
Когда я получить доступ к этому из запроса на стороне клиента, он выполняет 'Def get_query' и возвращает ошибку 404. – RknRobin
@RknRobin вы имеете в виду 'def get_queryset'? –
После двойной проверки он фактически запускает весь 'класс SubFileViewSet', включая' def get_queryset', но все равно игнорирует 'def send_file'. – RknRobin