我需要允許用戶重置並更改其密碼。在base.html文件模板,我有:在我的項目中處理password_reset表單中的Django auth錯誤
<div class='login-first-row'>
<form action="{% url 'login' %}" method='POST' role='form'>
{% csrf_token %}
<div class='form-group'>
<label for='username'>Username</label>
<input class='form-control' id='username' name='username' placeholder='username' type='text'>
</div>
<div class='form-group'>
<label for='password'>Password</label>
<input class='form-control' id='password' name='password' placeholder='Password' type='password'>
</div>
<button class='btn btn-success' type='submit'>Go!</button>
<p>
If you forgot your password
<a href="{% url 'password_reset' %}">Click here</a>
</p>
</form>
</div>
,用戶可以通過點擊鏈接HREF = 「{%URL 'password_reset' %}」訪問password_reset_form.html。 我password_reset_form.html
{% extends "base.html" %}
{% block content %}
<div class='container l-wrap'>
<div class='row'>
<div class='span12'>
<div class='container'>
<div class='row'>
<div class='span12'>
<div class='login-page'>
<p> Reset password </p>
<form action="" method="post">{% csrf_token %}
{{ form.email.errors }}
<p>
<label for="id_email"> Email address</label>
{{ form.email }}
<input type="submit" value="Reset my password" />
</p>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
的問題是,當我張貼的電子郵件地址,我得到的錯誤如下:
IOError at /accounts/password_reset/
[Errno 32] Broken pipe
Request Method: POST
Request URL: http://192.168.33.10:8000/accounts/password_reset/
Django Version: 1.7.8
Exception Type: IOError
Exception Value:
[Errno 32] Broken pipe
Exception Location: /vagrant/.virtualenv/local/lib/python2.7/site-packages/django/core/mail/backends/console.py in write_message, line 23
Python Executable: /vagrant/.virtualenv/bin/python
Python Version: 2.7.3
Python Path:
['/vagrant',
'/vagrant/.virtualenv/local/lib/python2.7/site-packages/distribute-0.6.24-py2.7.egg',
'/vagrant/.virtualenv/src/yadu/src',
'/vagrant/.virtualenv/src/python-social-auth-master',
'/vagrant/.virtualenv/src/django-timedeltafield',
'/vagrant/.virtualenv/local/lib/python2.7/site-packages/xhtml2pdf-0.0.6-py2.7.egg',
'/vagrant/.virtualenv/local/lib/python2.7/site-packages/PyPDF2-1.25.1-py2.7.egg',
'/vagrant/.virtualenv/local/lib/python2.7/site-packages/html5lib-1.0b8-py2.7.egg',
'/vagrant/.virtualenv/lib/python2.7',
'/vagrant/.virtualenv/lib/python2.7/plat-linux2',
'/vagrant/.virtualenv/lib/python2.7/lib-tk',
'/vagrant/.virtualenv/lib/python2.7/lib-old',
'/vagrant/.virtualenv/lib/python2.7/lib-dynload',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2',
'/usr/lib/python2.7/lib-tk',
'/vagrant/.virtualenv/local/lib/python2.7/site-packages',
'/vagrant']
根據該文檔,當我從password_reset_form模板提交表單,應調用'django.contrib.auth.views.password_reset'視圖。我用一些「打印」進行了調試,並驗證了這種情況沒有發生。我不明白我的帖子要求在哪裏。
的myapp/urls.py
urlpatterns = patterns('',
url(r'^$', index, name='index'),
url(r'^email-sent/$', mail_sent),
url('', include('social.apps.django_app.urls', namespace='social')),
url(r'^admin/', include(custom_admin.urls)),
url(r'^accounts/', include('django.contrib.auth.urls')),
[...]
)
的myapp/setting.py
INSTALLED_APPS = (
'suit',
'suit_redactor',
'django.contrib.sites',
'django.contrib.flatpages',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# FIXME: remove
'django.contrib.webdesign',
'django_extensions',
'pipeline',
'ajaximage',
'easy_maps',
'embed_video',
'yadu',
'import_export',
'social.apps.django_app.default',
'core.app',
'paypal.standard.ipn',
'payment',
'deal',
'help',# FIXME: move the flatpages part into application of its own
'django.contrib.admin',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
'yadu.middleware.Debug',
'social.apps.django_app.middleware.SocialAuthExceptionMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.tz",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.request",
)
ROOT_URLCONF = 'core.urls'
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
感謝您的幫助,您可以提供。
對不起,但實際上我是一個newby,我正在修復別人寫的項目。你可以再詳細一點嗎?從你的回答中,我已經理解了django不能send_mail(),對吧? – user123892
您可能沒有您的電子郵件後端設置。你需要settings.py來指向一個服務器,它可能是本地主機,也可能不是本地主機。你也可以使用像sendgrid這樣的服務,它有自己的後端可用。 Docs: https://docs.djangoproject.com/en/1.8/topics/email/ –
其實我的EMAIL_BACKEND設置爲'django.core.mail.backends.console.EmailBackend'。在'./manage.py shell'中我輸入'from django.core.mail import send_mail',然後'send_mail('Subject here','這裏是信息','[email protected]', [' [email protected]'],fail_silently = False)'。我得到了'MIME-Version:1.0 Content-Type:text/plain; charset =「utf-8」 Content-Transfer-Encoding:7bit Subject:Subject here From:[email protected] To:[email protected] Date:Mon,05 Oct 2015 14:17:46 - 0000 消息ID:<[email protected]tup.com>以下是消息。' – user123892