Django: Почему серверная часть электронной почты консоли не отправляет электронную почту? - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь создать приложение для сброса пароля пользователя по электронной почте. Я использую книгу «Django by Example», глава 3, а также руководствуюсь этим сайтом: https://simpleisbetterthancomplex.com/tutorial/2016/09/19/how-to-create-password-reset-view.html

Settings.py содержит следующую строку:

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

вместе с необходимыми настройками электронной почты.

Я попадаю в представление password_reset, ввод фиктивной почты, нажимаю кнопку отправки, что в итоге приводит меня к представлению password_reset_done. Ниже вывод консоли:

C:\PythonProjects\by-example-bookmarks>python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
May 01, 2018 - 21:13:39
Django version 2.0.4, using settings 'bookmarks.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
[01/May/2018 21:13:51] "GET /account/login/ HTTP/1.1" 200 1090
[01/May/2018 21:13:57] "GET /account/password_reset/ HTTP/1.1" 200 830
[01/May/2018 21:14:04] "POST /account/password_reset/ HTTP/1.1" 302 0
[01/May/2018 21:14:05] "GET /account/password_reset/done/ HTTP/1.1" 200 602

После вывода "POST" я ожидаю увидеть дамп электронного письма в ответ на настройку .console.EmailBackend, но ничего не получил, когда-либо.

Что может быть причиной сбоя при имитации отправки электронной почты?

Окружающая среда:

Windows 7, django 2.0, на консоли CMD, под оболочкой pipenv

Редактировать 1 Та же проблема на другом компьютере.

Редактировать 2 Изменение на .smtp ничего не меняет, без ошибок.

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

Редактировать 3 Я пробовал работу других людей, как этот: https://github.com/ruddra/django-reset-password/tree/master

Все еще не повезло.

Редактировать 4 Еще одна «чужая работа». Все еще не повезло. https://github.com/wsvincent/django-auth-tutorial

Это когда-нибудь работает?

Редактировать 5: views.py

from django.http import HttpResponse
from django.shortcuts import render
from django.contrib.auth import authenticate, login
from .forms import LoginForm
from django.contrib.auth.decorators import login_required

def user_login(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            user = authenticate( username=cd['username'],
                                 password=cd['password'])
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return HttpResponse('Authenticated '\
                                        'successfully')
                else:
                    return HttpResponse('Disabled account')
            else:
                return HttpResponse('Invalid login')
    else:
        form = LoginForm()
    return render(request, 'account/login.html', {'form': form})

@login_required
def dashboard(request):
    return render(request,
                  'account/dashboard.html',
                  {'section': 'dashboard'})

1053 ** * urls.py 1054 ** * 1055

from django.conf.urls import url, include
from . import views
import django.contrib.auth.views
# i think the following does not serve any purpose anymore
from django.contrib.auth import views as auth_views

urlpatterns = [
    # previous login view
    # url(r'^login/$', views.user_login, name='login'),

    # login / logout urls
    url(r'^login/$',
        django.contrib.auth.views.login,
        name='login'),
    url(r'^logout/$',
        django.contrib.auth.views.logout,
        name='logout'),
    url(r'^logout-then-login/$',
        django.contrib.auth.views.logout_then_login,
        name='logout_then_login'),
    url(r'^$', views.dashboard, name='dashboard'),
    url(r'^password-change/$',
        django.contrib.auth.views.password_change,
        name='password_change'),
    url(r'^password-change/done/$',
        django.contrib.auth.views.password_change_done,
        name='password_change_done'),

    # restore password urls
    url('^', include('django.contrib.auth.urls')),
] 

редактировать 6 Мое github репо здесь, на случай, если кому-то интересно: https://github.com/jeffplata/by-example-account

1 Ответ

0 голосов
/ 11 мая 2018

Теперь работает. По предложению @Burhan Khalid, сделал очень, очень уверен, что есть пользователь с действительным адресом электронной почты. В частности, электронное письмо, которое я печатаю в представлении сброса, находится в модели / таблице Users.

...