Django如何检查user是否在path中



我做了一个唯一的url,我想检查实际的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)

给定绑定到ChangeEmailView的URL由

设置
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是否存在。

相关内容

  • 没有找到相关文章

最新更新