django 2 выражение re_path, передающее токен подтверждения электронной почты - PullRequest
0 голосов
/ 05 сентября 2018

Я застрял с использованием регулярного выражения в django 2 url. Все кажется правильным, однако я получаю 404 ошибку.

Фактический путь:

http://localhost:8000/user/activate/b'MjQ'/4zb-89a933fe70e0d12de725/

ошибка:

Using the URLconf defined in ec2django.urls, Django tried these URL        patterns, in this order:

user/
^user/activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$ [name='activate']
health/
^static\/(?P<path>.*)$

The current path, user/activate/b'MjQ'/4zb-89a933fe70e0d12de725/, didn't match any of these.

urls.py

urlpatterns = [
   .....
   re_path(r'^user/activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
        user_activate, name='activate')
]

Генерация токенов:

            from django.utils.encoding import force_bytes
            from django.utils.http import urlsafe_base64_encode
            from django.template.loader import render_to_string
            from django.contrib.auth.tokens import default_token_generator

            message = render_to_string('email_account_activate.html', {
                'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                'token': default_token_generator.make_token(user),
            })

Проверка:

try:
    uid = force_text(urlsafe_base64_decode(uidb64))
    user = MyUser.objects.get(pk=uid)
except(TypeError, ValueError, OverflowError, MyUser.DoesNotExist):
    user = None
if user is not None and default_token_generator.check_token(user, token):
    user.is_active = True
    user.save()

Проблема с форматом URL или токена? Цени любую помощь.

...