我在我的django申请中的注册过程后发送一封电子邮件确认。出于安全原因,我需要了解如何验证在url中发送的代码im,而不在用户模型中添加新的代码字段。到目前为止,im在url和用户名中发送了一个随机代码,这个代码是经过验证的,而不是代码。
def registrar_usuario_view(request):
alphabet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
code = ''.join(random.choice(alphabet) for i in range(16))
print code
if request.method == 'POST':
f = RegisterForm(request.POST)
if f.is_valid():
usuario = f.cleaned_data['usuario']
email = f.cleaned_data['email']
clave = f.cleaned_data['clave']
confirmar_clave = f.cleaned_data['confirmar_clave']
captcha = f.cleaned_data['captcha']
u = User.objects.create_user(username = usuario, email = email, password = clave)
u.is_active = False
u.save()
# Mandamos mail de activacion
to = email
html_content = """<h3>Bienvenido Sr/a: %s </h3><p>Para confirmar su registro en el sitio Margonari Servicios Inmobiliarios le solicitamos haga click en el siguiente
<a href='http://localhost:8000/confirmacion/%s/%s'>enlace de confirmacion</a><br><p><b>Gracias por formar parte de Margonari Servicios Inmobiliarios.</b></p><br>
<small>Este es un mensaje enviado automaticamente. Por favor no responda a esta direccion de mail.</small>"""%(usuario, code, usuario)
msg = EmailMultiAlternatives('Administracion Margonari', html_content, 'from@server.com', [to])
msg.attach_alternative(html_content, 'text/html') #Definimos el contenido como html
msg.send() #Enviamos el correo
messages.add_message(request, messages.SUCCESS, """Los datos han sido ingresados correctamente. Le enviamos un correo de confirmacion
a la direccion que nos proporciono. Por favor verifique su casilla de correo no deseado. Muchas gracias.""")
ctx = {'form':f}
return render_to_response('users/registrar_usuario.html', ctx, context_instance = RequestContext(request))
else:
ctx = {'form':f}
return render_to_response('users/registrar_usuario.html', ctx, context_instance = RequestContext(request))
f = RegisterForm()
ctx = {'form':f}
return render_to_response('users/registrar_usuario.html', ctx, context_instance = RequestContext(request))
def confirmacion_view(request, code, user):
user = User.objects.get(username = user)
user.is_active = True
user.save()
return HttpResponseRedirect('/')
url(r'^confirmacion/(?P<code>.*)/(?P<user>.*)/$', 'confirmacion_view', name = 'vista_confirmacion'),
Django提供了一个令牌创建机制,不需要重新发明轮子。 因为我不使用基于函数的视图,这里的重点不是重构代码(无论如何我都会在CBVs中这样做),所以我只输出一个关于如何使用它的示例。
然后,您可以通过电子邮件将令牌发送给用户,令牌url应如下所示:
在激活视图中的某个位置:
相关问题 更多 >
编程相关推荐