Попытка заставить активацию электронной почты работать, но это не удается - PullRequest
0 голосов
/ 29 сентября 2019

Попытка заставить этот учебник работать в моем приложении: https://medium.com/@frfahim/django-registration-with-confirmation-email-bb5da011e4ef

Сбой 'uid', независимо от того, включаю ли я .decode ().

message = render_to_string('premium/activation_email.html', {'user':user,

 'token': account_activation_token.make_token(user),
 #this fails both with the .decode() and without
 'uid':urlsafe_base64_encode(force_bytes(user.pk)).decode(),
            })
mail_subject = 'Activate your membership account.'
send_mail(mail_subject, message,'info@clinicpricecheck.com', [request.user.email])

Этодве ошибки:

Reverse for 'activate' not found. 'activate' is not a valid view function or pattern name

Затем, если я добавлю .decode ():

str object has no attribute decode()

, вот мой urls.py с тегом активации:

path('activate/<uidb64>/<token>/', views.activate, 'activate'),

мой вид активации точно такой же, как и в учебнике

1 Ответ

1 голос
/ 29 сентября 2019

Поскольку Django >2.2, urlsafe_base64_encode будет возвращать строку вместо строки байтов, так что вам больше не придется вызывать .decode() после urlsafe_base64_encode.

Изменено в Django2.2: В более старых версиях вместо строки возвращается строка байтов.

Следуйте рекомендациям, которые вы включили в свой вопрос, проблема Reverse for 'activate' not found исходит из этого:

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

Есть 2 случая, которые могут привести к этой проблеме:

  1. Ваш путь:
path('activate/<uidb64>/<token>/', views.activate, 'activate'),

Вы должны назвать свое мнение следующим образом:

path('activate/<uidb64>/<token>/', views.activate, name='activate'),
Если ваша точка зрения находится на уровне сайта (внутри URL-адресов приложения django, а не в ROOT_URLS), вам может потребоваться добавить app_name = 'your_app_name' поверх вашего urlpatterns внутри urls.py.А затем внутри вашего почтового шаблона:
{% autoescape off %}
Hi {{ user.username }},
Please click on the link to confirm your registration,
http://{{ domain }}{% url 'your_app_name:activate' uidb64=uid token=token %}
{% endautoescape %}

Надеюсь, это поможет!

...