我正在尝试创建电子邮件验证身份验证,但无法访问此 URL
127.0.0.1:8000/activate/d34324/KYJsqYMoV5DJ0vewSBdC9KZlZtnOAU7KE
如何为此代码创建正确的路由?
urls.py
url(r'^logout/$', OwnerRegister.logout_view),
url(r'^activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',OwnerRegister.activate,name='activate'),
views.py
class OwnerRegister(TemplateView):
template_name = "owner_register.html"
def get_context_data(self, * args, ** kwargs):
context = super(OwnerRegister, self).get_context_data()
return context
def logout_view(request):
logout(request)
return HttpResponseRedirect("/")
def activate(request, uidb64, token):
try:
print('\n\n request',request)
user_id = request.GET.get('uid')
token = request.GET.get('token')
user = User.objects.get(username=user_id)
profile = OwnerInfo.objects.get(user=user)
print(user.date_joined)
if profile.confirmation_code == token and user.date_joined > (datetime.datetime.now()-datetime.timedelta(days=1)):
print("test")
user.is_active = True
user.save()
user.backend='django.contrib.auth.backends.ModelBackend'
auth_login(request,user)
return HttpResponseRedirect('You have activated this account')
except:
return HttpResponseRedirect('')
def send_registration_confirmation(self,user,request):
p = OwnerInfo.objects.get(user=user)
current_site = get_current_site(request)
content = current_site.domain+"/activate" + user.username + "/" + str(p.confirmation_code)
send_mail("Email Verify", content, 'no-reply@gsick.com', [user.email], fail_silently=False)
最佳答案
尽管您的代码中可能存在任何其他问题,但您的 URL 模式声明似乎存在问题。具体来说,URL 模式为 token
指定以下正则表达式。命名参数和尾部斜杠:
(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/
传入的字符串为token
在网址 does not match this regex因为它在第 13 个字符之后缺少连字符。
您的网址也没有尾部斜杠。提供 Django 的 APPEND_SLASH
就可以了。启用选项( the default behaviour ),这将导致 Django 在没有找到没有 URL 模式的情况下自动发出重定向以添加尾部斜杠。
您应该更改用于在 URL 中生成 token 的机制,以确保它与正则表达式匹配(添加连字符 indeed does so ),反之亦然。
关于python - 带有 token 参数的 Django 电子邮件验证 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52154017/