2015-10-05 23 views
0

我需要允許用戶重置並更改其密碼。在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' 

感謝您的幫助,您可以提供。

回答

0

Exception Location: /vagrant/.virtualenv/local/lib/python2.7/site-packages/django/core/mail/backends/console.py in write_message, line 23

看起來像的Django不能談談你的電子郵件的後端。檢查您的設置,然後嘗試發送消息./manage.py shell

+0

對不起,但實際上我是一個newby,我正在修復別人寫的項目。你可以再詳細一點嗎?從你的回答中,我已經理解了django不能send_mail(),對吧? – user123892

+0

您可能沒有您的電子郵件後端設置。你需要settings.py來指向一個服務器,它可能是本地主機,也可能不是本地主機。你也可以使用像sendgrid這樣的服務,它有自己的後端可用。 Docs: https://docs.djangoproject.com/en/1.8/topics/email/ –

+0

其實我的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

相關問題