Auf einem Django-Server habe ich eine Seite mit einer einzigen Schaltfläche, die eine Funktion startet. Diese Funktion dauert eine Weile, und ich habe versucht, Aktualisierungen des Prozesses in eine Variable request.session mit der Absicht zu schreiben, den Inhalt von einer separaten Seite aus zu überprüfen. Es scheint jedoch, dass request.session-Variablen erst aktualisiert werden, wenn die Funktion, in der sie enthalten sind, ausgeführt wird. Zumindest die Variable wird erst dann aktualisiert. Habe ich Recht, und wenn ja, gibt es eine Möglichkeit, in die Variable request.session vor dem Abschluss der Funktion zu schreiben?Aktualisiere request.session-Variable, bevor die Funktion endet
Die Sitzungen sind richtig eingerichtet, ich kann Variablen mit anderen Beispielen schreiben und lesen. Für jetzt mache ich auch nur einen temporären DB-Datensatz, um die Status-Update-Informationen zu speichern und von dort zu lesen, aber ich bin neugierig auf diese Anfrage.Session-Sache - ist meine Annahme richtig, und gibt es einen Weg herum?
Update:
views.py
@login_required
def autolink(request):
result, time = access_check(request, 'super')
if not result:
return redirect('index')
result = f_autolink(request)
if result is None:
result = request.session.get('technical', '')
return render(request, 'autolink.html', {'result': result, })
functions.py
def f_autolink(request):
if request.method == 'GET':
result = None
elif request.method == 'POST':
request.session['technical'] = 'starting the job'
result = f_kzd_autolink(request)
else:
result = None
return result
def f_kzd_autolink(request):
homeless = Kzd.objects.filter(payment__isnull=True, returned=False).distinct()
result = []
count = homeless.count()
counter = 0
request.session['technical'] = 'Starting link job - {c} records to process'.format(c=count)
for h in homeless:
counter += 1
request.session['technical'] = 'Checking record {c1} of {c}'.format(c1=counter, c=count)
/* long code that makes the h in homeless cycle run for about 3 minutes, unrelated to the question */
so grundsätzlich die Ansicht zeigt request.session.get ('technische', ''), aber keine Funktion schreibt an sie, bis sie fertig sind (sie schreibt dann über die Verarbeitung des letzten Datensatzes).
Sie sollten ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) in Ihre Frage einfügen. Veröffentlichen Sie Ihre Ansicht und was Sie bereits versucht haben. Dann wird es viel einfacher sein, eine Antwort zu geben. – trixn
@trixnn Entschuldigung, Informationen hinzugefügt. –
Wenn Sie lange Berechnungen ausführen müssen, möchten Sie sie wirklich out-of-Band mit einigen asynchronen Task-System wie Sellerie, Rq etc ... –