【问题标题】:Django v3 NoReverseMatch at /signup//signup/ 处的 Django v3 NoReverseMatch
【发布时间】:2021-10-14 04:56:02
【问题描述】:

我在注册后和发送任何电子邮件之前遇到错误:

未找到带有关键字参数“{'uidb64': 'NzA', 'token': 'ar65ve-0c2f1aaa20521539b574c02e5a6844f5'}' 的“activateuser”的反向操作。尝试了 1 种模式:['activateuser/$']

我的网址:

...
path('signup/', accounts.views.signupuser, name='signupuser'), 
url(r'^activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', ...

我的看法:

def signupuser(request):
if request.user.is_authenticated:
    return redirect('/charts/drawchart/v1/metrics/addresses/active_count/')
else:
    form = SignUpForm()
    if request.method == 'POST':
        form = SignUpForm(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('accounts/activate_account_mail.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 redirect('loginuser')
        else:
            return render(request, 'accounts/signup.html', {'form': form})
    else:
        return render(request, 'accounts/signup.html', {'form': form})


def activateuser(request, uidb64, token):
    try:
        uid = 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)
        context = {'uidb64':uidb64, 'token':token}
        return render(request, '/charts/drawchart/v1/metrics/addresses/active_count/', context)
    else:
        return HttpResponse('Activation link is invalid!')

最后是我的模板:

{% autoescape off %}
Hi {{ user.username }},
Please click on the link to confirm your registration,
http://{{ domain }}{% url 'activateuser' uidb64=uid token=token %}
{% endautoescape %}

【问题讨论】:

    标签: python-3.x django email path


    【解决方案1】:

    第二个路径的 URL 应该以 re_path 而不是 url 开头。它未被检测为路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-13
      • 2022-10-06
      • 1970-01-01
      • 1970-01-01
      • 2022-08-22
      • 2018-02-07
      • 2021-06-18
      • 1970-01-01
      相关资源
      最近更新 更多