Ich erstelle eine API-Funktion, die es dem Client ermöglicht, eine GET-Anfrage mit URL-Parametern zu senden, der Server empfängt und verarbeitet eine Datei basierend auf den gegebenen Informationen und gibt eine benutzerdefinierte Datei zurück. Die gute Nachricht ist, dass ich alle Schritte selbständig mache!Wie kann ich eine HttpResponse mit Django Rest Framework zurückgeben?
Ich konnte alles innerhalb der def get_query
Funktion mit Ausnahme funktioniert die Rückgabe der HttpResponse. Die Funktion erfordert eine Queryset-Antwort (sinnvoll, denke ich ..). Ich dachte mir, ich brauchte eine andere Funktion, damit ich die HttpResponse zurückgeben konnte, also habe ich def send_file
erstellt. Ich bin mir nicht sicher, wie ich diese Funktion aufrufen soll und jetzt überspringt sie sie einfach.
ansichten.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
Ich habe wenig Erfahrung mit Django Ruhe Framework und ich bin nicht sicher, ob es ein besserer Weg, dies zu implementieren, oder wie ich die Funktion def send_file
nennen könnte?
Als ich das Zugriff von Client-Seite Anfrage, es läuft 'def get_query' und gibt einen 404-Fehler. – RknRobin
@RknRobin du meinst 'def get_queryset'? –
Nach der doppelten Überprüfung wird die gesamte 'class SubFileViewSet' ausgeführt, einschließlich' def get_queryset', jedoch immer noch 'def send_file'. – RknRobin