首页 > 解决方案 > 按下验证链接后... Django 中没有任何反应 .. 用户仍未验证

问题描述

Views.py(应用名称:userprofileinfo)

from django.shortcuts import render
from userprofileinfo.forms import UserForm
from django.urls import reverse
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib.auth import authenticate, login, logout
from django.views.decorators.csrf import csrf_exempt,csrf_protect
from django.views import View
from django.contrib import messages
from django.core.mail import send_mail
from django.contrib.sites.shortcuts import get_current_site
from django.utils.encoding import force_bytes, force_text, DjangoUnicodeDecodeError
from django.core.mail import send_mail
from django.contrib.sites.shortcuts import get_current_site
from django.utils.http import urlsafe_base64_decode, urlsafe_base64_encode
from django.template.loader import render_to_string
from .utils import account_activation_token
from django.urls import reverse
from django.contrib import auth



@login_required
def special(request):
    return HttpResponseRedirect("You are logged in, Nice!")


@login_required
def userlogout(request):
    logout(request)
    return HttpResponseRedirect(reverse('careforallapp:base'))


def register(request):
    registered = False




    if request.method == "POST":
        user_form = UserForm(data=request.POST)
        if user_form.is_valid():

            user = user_form.save()
            user.set_password(user.password)
            user.is_active = False
            user.save()
            email = UserForm('email')
            current_site = get_current_site(request)
            email_body = {
                    'user': user,
                    'domain': current_site.domain,
                    'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                    'token': account_activation_token.make_token(user),
            }

            link = reverse('userprofileinfo:activate', kwargs={
                               'uidb64': email_body['uid'], 'token': email_body['token']})

            email_subject = 'Activate your account'

            activate_url = 'http://'+current_site.domain+link
            
            send_mail(
                    email_subject,
                    'Hi '+user.username + ', Please the link below to activate your account \n'+activate_url,
                    'settings.EMAIL_HOST',
                    [user.email],
                    fail_silently=False
            )

            return HttpResponseRedirect(reverse('careforallapp:base'))
        else:
            print(user_form.errors)
    else:
        user_form = UserForm()


    return render(request,'userprofileinfo/registration.html',
                           {'user_form':user_form,
                           'registered':registered})

class VerificationView(View):
    def get(self, request, uidb64, token):
        try:
            id = force_text(urlsafe_base64_decode(uidb64))
            user = User.objects.get(pk=id)

            if not account_activation_token.check_token(user, token):
                return redirect('login'+'?message='+'User already activated')

            if user.is_active:
                return redirect('login')
            user.is_active = True
            user.save()

            messages.success(request, 'Account activated successfully')
            return redirect('login')

        except Exception as ex:
            pass

        return HttpResponseRedirect(reverse('userprofileinfo:userlogin'))

def userlogin(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(username = username, password = password)

        if user:
            if user.is_active:
                login(request, user)
                return HttpResponseRedirect(reverse('careforallapp:base'))

            else:
                return HttpResponse("ACCOUNT NOT ACTIVE")
        else:
            print("Someone tried to login and failed!")
            print("Username: {} and password: {}".format(username, password))
            return HttpResponse("invalid login details")
    else:
        return render(request, 'userprofileinfo/login.html', {})

.env

export EMAIL_HOST_PASSWORD=*******
export EMAIL_HOST_USER = careall249@gmail.com
export EMAIL_HOST=smtp.gmail.com

网址.py

from django.conf.urls import url
from django.urls import path
from .views import VerificationView
from userprofileinfo import views

app_name = 'userprofileinfo'

urlpatterns = [
     url(r'^login/', views.userlogin, name='userlogin'),
     url(r'^register/', views.register, name='register'),
     url(r'^logout/', views.userlogout, name='userlogout'),
     url(r'^special/', views.special, name='special'),
     path('activate/<uidb64>/<token>', VerificationView.as_view(), name='activate'),
]

有人可以通过代码。登录页面,注册页面一切正常,但验证链接不起作用,当用户注册时,他在他的 Gmail 上获得了链接,但是当他按下链接进行验证时没有任何反应。用户未激活。有人可以通过它并找到错误。

标签: djangosmtp

解决方案


推荐阅读