Письмо-подтверждение со ссылкой для активации не появляется в консоли - PullRequest
1 голос
/ 12 октября 2019

Я написал код для регистрации, в котором после ввода имени и пароля он будет перенаправлять нас на страницу отправки электронной почты, а также предполагать отправку почты в консоли, но она не отображается.

просмотров. py

def signup(request):
    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)
            subject = 'Activate Your MySite Account'
            message = render_to_string('user/account_activation_email.html', {
            'user': user,
            'domain': current_site.domain,
            'uid': urlsafe_base64_encode(force_bytes(user.pk)),
            'token': account_activation_token.make_token(user),
        })
        user.email_user(subject, message)
        return redirect('account_activation_sent')
    else:
        form = SignUpForm()
    return render(request, 'user/register.html', {'form': form})

settings.py

Настройка электронной почты в настройках.

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

urls.py

Это отображение URLиспользуется ниже.

urlpatterns = [
    path('register/', signup,name='sinup_user'),
    path('password_reset/',auth_view.PasswordResetView.as_view(), name='password_reset'),
path('password_reset/done/',auth_view.PasswordResetDoneView.as_view(), name='password_reset_done'),
    path('reset/done',auth_view.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
    path('account_activation_sent/', account_activation_sent, name='account_activation_sent'),
    path('activate/<uidb64>/<token>/', activate, name='activate'),

]

путь ('reset ///', auth_view.PasswordResetConfirmView.as_view (), name = 'password_reset_confirm'),

account_activation_email.html

Это шаблон консоли, который использовался.

{% autoescape off %}
Hi {{ user.username }},

Please click on the link below to confirm your registration:

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

Консоль

Приведенные ниже формулировки появляются в консоли, но почта здесь не отображается.

System check identified no issues (0 silenced).
October 12, 2019 - 12:50:55
Django version 2.2.6, using settings 'music.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[12/Oct/2019 12:51:41] "GET /user/register/ HTTP/1.1" 200 4282
[12/Oct/2019 12:52:03] "POST /user/register/ HTTP/1.1" 302 0
[12/Oct/2019 12:52:03] "GET /user/account_activation_sent/ HTTP/1.1" 200 

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

Я сделал ошибку в шаблоне URL.

urls.py

URL с неправильным шаблоном

path('signup/', user_views.signup,name='sinup'),
path('account_activation_sent/', user_views.account_activation_sent, name='account_activation_sent'),
path('activate/<uidb64>/<token>/', user_views.activate, name='activate'),

шаблон URL после исправления

path('account/signup/', user_views.signup,name='sinup'),
path('account/account_activation_sent/', user_views.account_activation_sent, name='account_activation_sent'),
path('account/activate/<uidb64>/<token>/', user_views.activate, name='activate'),

Мне пришлось добавить аккаунт / для URLначинает то, что я пропустил, теперь это работает отлично.

0 голосов
/ 12 октября 2019

Вы должны убедиться, что бэкэнд электронной почты задан правильно в settings.py:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

Кроме того, код, который отправляет электронное письмо, должен иметь отступ с «if form.is_valid ():»в противном случае вы будете перенаправлены на «account_activation_sent», даже если форма недействительна.

Предложение 'else:' также требует правильного отступа.

def signup(request):
    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)
            subject = 'Activate Your MySite Account'
            message = render_to_string('account_activation_email.html', {
                'user': user,
                'domain': current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                'token': account_activation_token.make_token(user),
            })
            user.email_user(subject, message)
            return redirect('account_activation_sent')
    else:
        form = SignUpForm()
    return render(request, 'signup.html', {'form': form})

Также см. https://simpleisbetterthancomplex.com/tutorial/2017/02/18/how-to-create-user-sign-up-view.html

Или вы можете использовать django-allauth, который сделает все это за вас, и просто изменить шаблоны по умолчанию.

...