Django как проверить, находится ли пользователь в пути

Я сделал уникальный url и хочу проверить, содержит ли acutal url uid, поэтому я сделал оператор if, который всегда ложен в моем случае, что я могу изменить, чтобы он работал и проверял, содержит ли путь uid.

views.py

@login_required(login_url='home:login')
def ChangeEmailView(request, token):
   packet = get_object_or_404(TempUrl, user=request.user)
   token = packet.uid
   if request.path == str(token):
       if request.method == 'POST':
           objects = User.objects.get(email = request.user.email)
           form = EmailChangingForm(request.POST, instance=objects)
           if form.is_valid():
               form.save()
               
           return redirect('home:profilesettings')
           
       else:
           objects = User.objects.get(email = request.user.email)
           form = EmailChangingForm(request.POST, instance=objects)
           packet = get_object_or_404(TempUrl, user=request.user)
           token = packet.uid
       
   else:  
       print('site wasnt found')
       objects = User.objects.get(email = request.user.email)
       form = EmailChangingForm(request.POST, instance=objects)
       packet = get_object_or_404(TempUrl, user=request.user)
       token = packet.uid
       return redirect('home:index')
   context = {'form': form, 'token': token}
   return render(request, 'home/email_settings.html', context)

Учитывая, что URL, связанный с ChangeEmailView, был установлен

path('settings/email/changeemail/<str:token>', views.ChangeEmailView , name="changeemail")

тогда if request.path == str(token) всегда будет False, потому что request.path включает полный путь URL (т.е. /settings/email/changeemail/), а не только ваш токен.

Я думаю, что вы хотите следующее

@login_required(login_url='home:login')
def ChangeEmailView(request, token):
   packet = get_object_or_404(TempUrl, user=request.user)
   site_token = packet.uid
   if token == str(site_token):
       if request.method == 'POST':
           objects = User.objects.get(email = request.user.email)
           form = EmailChangingForm(request.POST, instance=objects)
           if form.is_valid():
               form.save()
               
           return redirect('home:profilesettings')
           
       else:
           objects = User.objects.get(email = request.user.email)
           form = EmailChangingForm(request.POST, instance=objects)
           packet = get_object_or_404(TempUrl, user=request.user)
           token = packet.uid
       
   else:  
       print('site wasnt found')
       objects = User.objects.get(email = request.user.email)
       form = EmailChangingForm(request.POST, instance=objects)
       packet = get_object_or_404(TempUrl, user=request.user)
       token = packet.uid
       return redirect('home:index')
   context = {'form': form, 'token': token}
   return render(request, 'home/email_settings.html', context)

Django извлечет последний элемент пути URL и передаст его вашему представлению в качестве параметра token, вы можете просто использовать его для проверки наличия вашего uid.

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