Django: неожиданное поведение window.onpopstate с Chrome 79 - PullRequest
0 голосов
/ 22 января 2020

РЕДАКТИРОВАТЬ

наконец, я использую событие 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})

...