РЕДАКТИРОВАТЬ
наконец, я использую событие window.onpopstate, чтобы запретить пользователю go вернуться к работе с Firefox, но не с Chrome 79 (и другими браузерами?)
Я прочитал много постов и официальную документацию, которая, кажется, говорит, что эта «ошибка» была исправлена после Chrome 34 ... но, похоже, это не совсем честно, читая документацию, я делаю не совсем понимаю это событие и поведение до сих пор ...
Как я могу решить эту проблему?
Я знаю, что эта топика c уже обсуждалась, но ни одно из решений не помогло моя проблема.
У меня есть 3 формы, которые обновляют те же модели. Я хотел бы управлять / предотвратить возвращение пользователя с помощью стрелки назад.
Я пытался использовать window.location, window.onhashchange = function () {}, помечать переменную сеанса, но ничего не работает, и я теряюсь
Когда пользователь нажимает стрелку назад со 2-й формы на go и обратно на 1-ю форму, я хотел бы, чтобы либо событие было заблокировано (лучше всего), либо пользователь перенаправлен на домашнюю страницу
Я заметил, что щелчок стрелка назад во 2-й форме не вызывает представление индекса, причина, по которой «стратегия флага» не работает
@login_required
@permission_required('unblind.can_unblind')
def index(request):
if request.method == "POST":
form = AveugleProcedureForm(request, data=request.POST or None)
if form.is_valid():
unblind = form.save()
# database treatment
return redirect('unblind:edit', pk = unblind.pk)
else:
form = AveugleProcedureForm(request)
return render(request, 'unblind/index.html', {'form': form})
@login_required
@permission_required('unblind.can_unblind')
def edit(request, pk):
if request.method == "POST":
form = AveugleForm(request, data=request.POST or None)
if form.is_valid():
# unblind = form.save()
# database treatment
unblind = Aveugle.objects.get(unb_ide = pk)
unblind.unb_pro = form.cleaned_data['unb_pro']
unblind.unb_nom_dem = form.cleaned_data['unb_nom_dem']
unblind.unb_nom_rea = form.cleaned_data['unb_nom_rea']
unblind.unb_dat = form.cleaned_data['unb_dat']
unblind.pat = form.cleaned_data['pat']
unblind.unb_num = form.cleaned_data['unb_num']
unblind.unb_mot = form.cleaned_data['unb_mot']
unblind.save()
# contrôler le couple numéro patient/boite de médicament
# récupération du traitement
treatment = Medicament.objects.get(med_num = unblind.unb_num).med_dru
# envoie d'un email de confirmation
if treatment == 1:
unblind_treatment = _('ASPIRIN')
else:
unblind_treatment = _('PLACEBO')
email(unblind.pat,unblind.unb_num,unblind_treatment,unblind.unb_mot)
return redirect('unblind:result', pk = unblind.pk)
else:
form = AveugleForm(request)
return render(request, 'unblind/edit.html', {'form': form,'pk': pk})
@login_required
@permission_required('unblind.can_unblind')
def result(request, pk):
# Récupération de l'enregistrement
unblind = Aveugle.objects.get(unb_ide = pk)
treatment = Medicament.objects.get(med_num = unblind.unb_num).med_dru
if request.method == "POST":
form = AveugleResultForm(request, data=request.POST or None)
if form.is_valid():
# database treatment
unblind.unb_rec = form.cleaned_data['unb_rec']
# unblind.unb_com = form.cleaned_data['unb_com']
unblind.unb_log_dat = datetime.now()
unblind.unb_log = request.user.username
unblind.unb_log_sit = request.session['selected_site']
unblind.save()
return redirect('home')
else:
form = AveugleResultForm(request)
return render(request, 'unblind/result.html', {'form': form,'unblind':unblind,'treatment':treatment})