Переменная сессии не обновляется в django, принимая только первое значение

это представление, которое отправляет код подтверждения на электронную почту, при каждом выполнении генерирует новый код-сбрасывает переменную идеально

def codeSender(request,user):


    code = random.randint(100000, 999999)

    request.session['reset_code'] = code
    request.session.save()
    print(request.session['reset_code']) 

    # will print a new code each time this view is being executed
    
    request.session['user'] = user.pk  

    subject = "Password reset"
    message = render_to_string('authentication/emailResetPassword.html', {'code': code})

    email = EmailMessage(
        subject,
        message,
        settings.EMAIL_HOST_USER,
        to=[user.email]
    )
    email.send()

предполагается, что это представление будет принимать значение проверки имени пользователя, если оно существует, а затем вызывать представление codeSender(), возвращая json-ответ, указывающий, что будет показана форма подтверждения кода

def resetPassword(request):

    if request.method == 'POST':
        form_name = request.POST.get('form_name') 
        
        if form_name == "form1":
            username = request.POST["username"]

            userQuery = User.objects.filter(username=username)
            if not userQuery.exists():
                
                clear_messages(request) 
                
                messages.error(request, "You need to create an account, username doesn't exist!")

                serialized_messages = json.dumps([{
                'message': message.message,
                'message_tag': message.tags,
                } for message in messages.get_messages(request)])

                response_data = {
                    'show_form2': False,
                    'messages': serialized_messages}
                
            else:
                user = userQuery.first()
                
                codeSender(request,user)
            
                messages.success(request, "we've sent to your email a confirmation code please write it")
                
                serialized_messages = json.dumps([{
                'message': message.message,
                'message_tag': message.tags,
                } for message in messages.get_messages(request)])

                response_data = {
                    'show_form2': True,
                    'messages': serialized_messages}
                
            return JsonResponse(response_data)
    return render(request, "authentication/resetPassword.html")

Проблема кроется здесь, в этом представлении я сравниваю код, введенный пользователем, чтобы увидеть, если он соответствует reset_code (переменная сессии), если он не соответствует, я попытался имитировать поведение формы1, так что я могу снова визуализировать форму подтверждения кода но дело в том, что он всегда сравнивает введенный код с первым кодом, сгенерированным codeSender в сессии, он не обновляет его, пока я не обновлю url сброса снова

def verify_code(request):   
     user_pk=request.session.get('user')
     user=User.objects.filter(pk=user_pk).first()
     if request.method == "POST" :
         codetrial = request.POST.get("code")
         if int(codetrial) == request.session.get('reset_code'):
             return redirect("resetConfirm")
         else:
             clear_messages(request)
             messages.error(request,'code doesnt match!, we sent you another code try again')


             data = {'username':user.username, 'form_name': "form1"}
             session = requests.Session()
             resp = session.get('http://127.0.0.1:8000/reset')
             csrf_token = resp.cookies['csrftoken']
             resp2 = session.post('http://127.0.0.1:8000/reset', data=data, headers={'X-CSRFToken': csrf_token})
             return render(request, 'authentication/resetPassword.html', {'json_data': resp2.text ,'identifier': 'view1'})
     else:
         return render(request,"authentication/resetPasswordConfirm.html",{"user":user.username})


вот ссылки

    path('reset',views.resetPassword,name='reset'),
    path('verify',views.verify_code,name='verify'),

и вот шаблон, есть 2 формы форма1, которая принимает имя пользователя, если оно существует, то вид resetCode показывает форму2, которая (форма подтверждения кода) отвечает за обработку кода, отправленного на электронную почту

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