Home > Software design >  Django how to check if user is in path
Django how to check if user is in path

Time:10-28

I made an unique url and I want to check if the acutal url contains the uid so I made a if statement which is always false in my case so what can I change that it works and checks if the path contains the 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)

CodePudding user response:

Given that URL bound to ChangeEmailView was set by

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

then if request.path == str(token) is always False because request.path includes full URL path (i.e. /settings/email/changeemail/) not just your token.

I think you want the following

@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 will extract last entry of URL path and pass to your view as the token parameter, you can just use that to check if your uid is present.

  • Related