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.