Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django 3.1.3中的电子邮件激活链接问题_Python_Django - Fatal编程技术网

Python Django 3.1.3中的电子邮件激活链接问题

Python Django 3.1.3中的电子邮件激活链接问题,python,django,Python,Django,嗯,我决定通过向刚注册的用户的电子邮件发送一个激活链接来实现一个帐户身份验证系统,下面是视图和发送的消息 def register(request): if request.method == 'POST': form = UserRegisterForm(request.POST) if form.is_valid(): user = form.save(commit=False) user.is_acti

嗯,我决定通过向刚注册的用户的电子邮件发送一个激活链接来实现一个帐户身份验证系统,下面是视图和发送的消息

def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.is_active = False
            user.save()
            current_site = get_current_site(request)
            mail_subject = 'Activate your blog account.'
            message = render_to_string(
                'users/email_template.html',
                {
                    'user': user,
                    'domain': current_site.domain,
                    'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                    'token': account_activation_token.make_token(user),
                }
            )
            to_email = form.cleaned_data.get('email')
            email = EmailMessage(mail_subject, message, to=[to_email])
            email.send()
            return HttpResponse('Please confirm your email address to complete the registration')
    else:
        form = UserRegisterForm()
    return render(request, 'users/register.html', {'form': form})
 

 def activate(request, uidb64, token):
     try:
        uid = force_text(urlsafe_base64_decode(uidb64))
        user = User.objects.get(pk=uid)
     except(TypeError, ValueError, OverflowError, User.DoesNotExist):
        user = None
     if user is not None and account_activation_token.check_token(user, token):
        user.is_active = True
        user.save()
        login(request, user)
        return HttpResponse('Thank you for your email confirmation. Now you can login account.')
     else:
        return HttpResponse('Activation link is invalid!')
令牌生成器类:

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


 class TokenGenerator(PasswordResetTokenGenerator):
       def _make_hash_value(self, user, timestamp):
           return (
               text_type(user.pk) + text_type(timestamp) +
               text_type(user.is_active)
           )

 account_activation_token = TokenGenerator()
包含以下消息的模板:

 {% autoescape off %}
     Hi {{ user.username }},
     Please click on the link to confirm your registration

     http://{{ domain }}{% url 'activate' uidb64=uid token=token %}
 {% endautoescape %}
url.py:

urlpatterns = [
    path('register/', views.register, name='register'),
    path('activate/<uidb64>/<token>/', views.activate, name='activate'),
    path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='logout'),
    path("profile/<str:username>/", views.profile, name="profile"),
]
urlpatterns=[
路径('register/',views.register,name='register'),
路径('activate//',views.activate,name='activate'),
路径('login/',auth_views.LoginView.as_view(template_name='users/login.html'),name='login'),
路径('logout/',auth_views.LogoutView.as_view(template_name='users/logout.html'),name='logout'),
路径(“profile/”,views.profile,name=“profile”),
]
一切正常,但激活链接有问题,它看起来是这样的:http://localhost:8000//users/activate/MTY/agxxit-58f6e97c157ac2855dd80794f2ce9c62/端口8000后有两个条形图,这会生成错误,要工作,我需要编辑浏览器条形图中的链接,删除其中一个条形图。是否有人知道如何组织此链接,使其不会出现在端口8000后的两个栏中?

您的域名必须是“www.example.com”且不带任何斜杠

来自Django:-与网站关联的完全限定域名。例如,
www.example.com

因此,通过
/admin/sites/site/


在您的情况下,它应该是:localhost:8000

Heya-您的url.py配置是什么样子的?不知道你是否有一个额外的斜杠。我忘了发布url配置。请稍等,我会的edit@Joaquim,对你有帮助吗?你的问题解决了吗?谢谢worked@Joaquim,很乐意帮忙