Пришлите email оповещение после регистрации django

Я отправляю подтверждение по электронной почте после регистрации в моем приложении django. Мне нужно выяснить по соображениям безопасности, как я могу проверить код im, отправляющий URL, не добавляя новое поле кода в пользовательскую модель. Пока что я отправляю случайный код в url и имя пользователя, которое проверено, но не код.

Регистрация VIEW

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)) 

Подтверждение VIEW

 def confirmacion_view(request, code, user): user = User.objects.get(username = user) user.is_active = True user.save() return HttpResponseRedirect('/') 

URL

 url(r'^confirmacion/(?P<code>.*)/(?P<user>.*)/$', 'confirmacion_view', name = 'vista_confirmacion'), 

  • Как я должен понимать вывод dis.dis?
  • xcrun / lipo зависает с OS X Mavericks и XCode 4.x
  • Почему `numpy.einsum` работает быстрее с` float32`, чем `float16` или` uint16`?
  • Поддержка ElementTree в Python 2.6.2?
  • Что делает ошибка: «Загруженная среда исполнения CuDNN: 5005, но источник был скомпилирован с 5103` означает?
  • Как построить карту плотности в python?
  • Расчет матричных вычислений на графическом процессоре медленнее, чем на CPU
  • Нужна помощь в создании рекурсивного синтаксического анализа, используя пираринг
  • One Solution collect form web for “Пришлите email оповещение после регистрации django”

    Django обеспечивает механизм создания токенов, нет необходимости изобретать велосипед. Поскольку я не использую представления, основанные на функциях, и здесь нужно не реорганизовать ваш код (я бы сделал это в CBV в любом случае), я просто приведу образец того, как вы можете его использовать.

      from django.contrib.auth.tokens import default_token_generator from django.utils.http import urlsafe_base64_encode from django.utils.encoding import force_bytes new_user=User.objects.create_user(username = usuario, email = email, password = clave) new_user.save() token = default_token_generator.make_token(new_user) uid = urlsafe_base64_encode(force_bytes(new_user.pk)) 

    Затем вы можете отправить токен пользователю, маркер должен выглядеть так:

     url(r'^users/validate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', activationview, name='user-activation-link'), 

    Где-то внутри вас активирует ваше мнение:

     from django import http uidb64 = request.GET.get('uidb64') token = request.GET.get('token') if uidb64 is not None and token is not None: from django.utils.http import urlsafe_base64_decode uid = urlsafe_base64_decode(uidb64) try: from django.contrib.auth import get_user_model from django.contrib.auth.tokens import default_token_generator user_model = get_user_model() user = user_model.objects.get(pk=uid) if default_token_generator.check_token(user, token) and user.is_active == 0: ...do success stuff return http.HttpResponseRedirect(a_success_url) except: pass return http.HttpResponseRedirect(a_failure_url) 
    Python - лучший язык программирования в мире.