Как я могу отправить сообщение из представления в другое представление при использовании реверса в Django

У меня есть 2 представления для вставки номера телефона, а другое представление используется для проверки OTP кода, теперь я хочу отправить сообщение из представления проверки в предыдущее представление, которое показывает, что код проверки не действителен или время истекло.

этот вид просто проверяет номер телефона, который регистрируется или нет

def manage_account(request,):



form = RegisterForm(request.POST)

if request.method == 'POST':
    # if user is exist just login else make user
    try:
        if 'phone_number' in request.POST:
            phone_number = request.POST.get('phone_number')
            user = UserPhone.objects.get(phone_number=phone_number)
            # send OTP
            otp = helper.get_random_otp()
            # helper.send_otp(phone_number, otp)
            # save otp
            user.otp = otp
            print('OTP:', otp)
            user.save()
            request.session['user_phone'] = user.phone_number
            # redirect to verify page
            return HttpResponseRedirect(reverse('verify'))
    except UserPhone.DoesNotExist:
        form = RegisterForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            # send otp
            otp = helper.get_random_otp()
            # helper.send_otp(phone_number, otp)
            # save otp
            user.is_active = False
            user.otp = otp
            print('OTP:', otp)
            user.save()
            # for send a value to other pages
            request.session['user_phone'] = user.phone_number
            # redirect to verify page
            return HttpResponseRedirect(reverse('verify'))

return render(request, 'registration/login.html', {'form': form, })

этот вид для проверки OTP кода, если он не действителен или время истекло, он возвращается к виду manage_accout, которому я хочу отправить сообщение тоже.

def verify(request):
# for get value from other pages
request.session['verification'] = True
verification = 0
try:
    phone_number = request.session.get('user_phone')
    user = UserPhone.objects.get(phone_number=phone_number)
    if request.method == 'POST':
        #chek otp exprition
        if not helper.check_otp_expiration(user.phone_number):
            # show message in manage_account, that expire time

            return HttpResponseRedirect(reverse('manage_account',))


        if user.otp != int(request.POST.get('otp')):
            # show message in manage_account, that OTP code is not valid

            return HttpResponseRedirect(reverse('manage_account',))
        else:
            user.is_active =True
            user.save()
            login(request, user)
            return HttpResponseRedirect(reverse('myaccount'))

    return render(request, 'registration/verify.html', {'phone_number': phone_number})

except UserPhone.DoesNotExist:
    return HttpResponseRedirect(reverse('manage_account'))

Как я могу это сделать?

Вы захотите добавить сообщение прямо перед вашим перенаправлением в представлении проверки, например, так:

def verify(request):
# for get value from other pages
request.session['verification'] = True
verification = 0
try:
    phone_number = request.session.get('user_phone')
    user = UserPhone.objects.get(phone_number=phone_number)
    if request.method == 'POST':
        #chek otp exprition
        if not helper.check_otp_expiration(user.phone_number):
            messages.info(request, f'Your message here')
            return HttpResponseRedirect(reverse('manage_account',))


        if user.otp != int(request.POST.get('otp')):
            messages.info(request, f'Your message here')
            return HttpResponseRedirect(reverse('manage_account',))
        else:
            user.is_active =True
            user.save()
            login(request, user)
            return HttpResponseRedirect(reverse('myaccount'))

    return render(request, 'registration/verify.html', {'phone_number': phone_number})

except UserPhone.DoesNotExist:
    return HttpResponseRedirect(reverse('manage_account'))

Затем вам нужно добавить HTML для отображения сообщения либо на следующей странице, либо (лучше) в базовый шаблон, используемый каждой страницей на вашем сайте. Что-то вроде:

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

Вы можете прочитать больше о django messages framework здесь в docs.

Если вы используете Bootstrap и хотите интегрировать фреймворк сообщений с классами сообщений Bootstrap, есть прекрасный пример того, как это сделать здесь.

Вернуться на верх