Как отправить ссылку для подтверждения по электронной почте в Django? - PullRequest
0 голосов
/ 05 марта 2019

Этот код работал раньше, но больше не работает. Все работает нормально, но не отправляет электронное письмо пользователям после завершения процесса регистрации. Есть ли решения для этого кода?

здесь views.py

def activate(req, uidb64, token):
    try:
        uid = urlsafe_base64_decode(uidb64).decode()
        user = User.objects.get(id=uid)
    except(TypeError, ValueError):
        user = None
    if user and activation_token.check_token(user, token):
        user.is_active = True
        user.save()
        messages.info(req, 'Your Account activated. Now Login')
        return redirect("shop:users_signin")
    else:
        messages.error(req, "Activation  link is Invalid.")



def users_signup(req):
    if req.method == "POST":
        form = UserSignupForm(req.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.is_active = False
            user.save()
            site = get_current_site(req)
            mail_subject = "Confirmation message"
            message = render_to_string('shop/activate_mail.html', {
                "user": user,
                'domain': site.domain,
                'uid':  urlsafe_base64_encode(force_bytes(user.pk)).decode(),
                'token': activation_token.make_token(user)
            })
            to_email = form.cleaned_data.get('email')
            to_list = [to_email]
            from_email = settings.EMAIL_HOST_USER
            send_mail(mail_subject, message, from_email, to_list, fail_silently=True)
            messages.success(req,"Thanks for your registration. A confirmation link has been sent to your email")
    else:
        form = UserSignupForm()
    return render(req,'shop/users_signup.html',{'form':form})

вот мой URL

urls.py

path('signup/user/',views.users_signup,name='users_signup'),
path('activate/<uidb64>/<token>/', views.activate, name='activate'),

вот мои settings.py

settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER ='my email'
EMAIL_HOST_PASSWORD = 'my pass'
EMAIL_POST = '587'

вот мои токены.py

tokens.py

from django.contrib.auth.tokens import PasswordResetTokenGenerator
from django.utils import six

class tokenGenerate(PasswordResetTokenGenerator):
    def _make_hash_value(self, user, timestamp):
        return (
            six.text_type(user.id)+six.text_type(timestamp)+six.text_type(user.is_active)
        )

activation_token=tokenGenerate()

вот мой activ_mail.html

activate_mail.html

Hi {{user.username}} Thanks for your registration in our college finder application.
Please click on the link below to activate your account.
http://{{domain}}{% url 'shop:activate' uidb64=uid token=token  %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...