Zusammenfassung meiner Website: Ein Benutzer gibt einige Informationen ein, die nach dem Klicken auf "Abschicken" über AJAX an das Backend übermittelt werden. Wenn das Back-End die Information empfängt, erzeugt es eine DOCX unter Verwendung der Information und liefert diese DOCX-Datei an den Benutzer zurück.PythonAnywhere So behandeln Sie mehrere "Web Worker" oder Prozesse
Hier ist mein AJAX-Code in meiner HTML-Datei
$.ajax({
type:'POST',
url:'/submit/',
data:{
data that I submit
},
dateType: 'json',
success:function() {
document.location = "/submit";
}
})
für My Views Funktion/einreichen/die send_file Datei
def submit(request):
#Receive Data
#Create a File with the Data and save it to the server
return send_file(request)
def send_file(request):
lastName = get_last_name() +'.docx'
filename = get_full_path() # Select your file here.
wrapper = FileWrapper(open(filename , 'rb'))
response = HttpResponse(wrapper, content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document')
response['Content-Disposition'] = 'attachment; filename=' + lastName
response['Content-Length'] = os.path.getsize(filename)
return response
Das funktioniert zurück verwendet wird nun einwandfrei für einige Zeit. Ich hatte jedoch Probleme, als ich die Anzahl der "Web-Worker"/Prozesse von 1 auf 4 in meinem Hosting-Account erhöhte. Was passiert, ist, dass ein anderer Web-Mitarbeiter zum Senden der Datei verwendet wird, wodurch eine neue Instanz der Website erstellt wird. Das Problem dabei ist, dass die neue Instanz nicht den Dateipfad enthält, der mit dem Web-Worker erstellt wird, der die Datei erstellt.
Wie gesagt, das funktionierte einwandfrei, wenn meine WebApp nur einen "Web Worker" oder einen Prozess hatte. Jetzt habe ich nur noch eine Erfolgsquote von etwa 50%.
Es ist fast wie ein Prozess versucht, die Datei zu senden, bevor es erstellt wurde. Oder der Prozess hat keinen Zugriff auf den Dateinamen des Prozesses, der ihn erstellt hat.
Jede Hilfe würde sehr geschätzt werden. Vielen Dank!
Code Versucht, Pfadname über Anfrage und dann zurück an den Server zu senden.
Senden Zeigen Sie die zurückgelieferten Dateiinformationen zurück an ajax.
def submit(request):
# Receive DATA
# Generate file with data
lastName = get_last_name() +'.docx'
filename = get_full_path() # Select your file here.
return HttpResponse(json.dumps({'lastname': lastName,'filename':filename}), content_type="application/json")
Erfolg Funktion von AJAX
success:function(fileInfo) {
name_last = fileInfo['lastname']
filepath= fileInfo['filepath']
document.location = "/send";
}
So kann ich die Fileinfo mit dem "/ senden" schicken?
Bitte fügen Sie get_full_path() hinzu, es wird zum Debuggen benötigt. – Fian