Django – 连接被拒绝

当我发表评论,不保存,崩溃(错误:[Errno 111]连接被拒绝),为什么?

views.py

import time from calendar import month_name from django.http import HttpResponseRedirect, HttpResponse from django.shortcuts import get_object_or_404, render_to_response from django.contrib.auth.decorators import login_required from django.core.context_processors import csrf from django.core.paginator import Paginator, InvalidPage, EmptyPage from django.core.urlresolvers import reverse from dbe.blog.models import * from django.forms import ModelForm class CommentForm(ModelForm): class Meta: model = Comment exclude = ["post"] def post(request, pk): post = Post.objects.get(pk=pk) comments = Comment.objects.filter(post=post) d = dict(post=post, comments=comments, form=CommentForm(), user=request.user) d.update(csrf(request)) return render_to_response("post.html", d) def delete_comment(request, post_pk, pk=None): if request.user.is_staff: if not pk: pklst = request.POST.getlist("delete") else: pklst = [pk] for pk in pklst: Comment.objects.get(pk=pk).delete() return HttpResponseRedirect(reverse("dbe.blog.views.post", args=[post_pk])) def add_comment(request, pk): p = request.POST if p.has_key("body") and p["body"]: author = "Anonymous" if p["author"]: author = p["author"] comment = Comment(post=Post.objects.get(pk=pk)) cf = CommentForm(p, instance=comment) cf.fields["author"].required = False comment = cf.save(commit=False) comment.author = author notify = True if request.user.username == "ak": notify = False comment.save(notify=notify) return HttpResponseRedirect(reverse("dbe.blog.views.post", args=[pk])) def mkmonth_lst(): if not Post.objects.count(): return [] # set up vars year, month = time.localtime()[:2] first = Post.objects.order_by("created")[0] fyear = first.created.year fmonth = first.created.month months = [] for y in range(year, fyear-1, -1): start, end = 12, 0 if y == year: start = month if y == fyear: end = fmonth-1 for m in range(start, end, -1): months.append((y, m, month_name[m])) return months def month(request, year, month): posts = Post.objects.filter(created__year=year, created__month=month) return render_to_response("list.html", dict(post_list=posts, user=request.user, months=mkmonth_lst(), archive=True)) def main(request): posts = Post.objects.all().order_by("-created") paginator = Paginator(posts, 10) try: page = int(request.GET.get("page", '1')) except ValueError: page = 1 try: posts = paginator.page(page) except (InvalidPage, EmptyPage): posts = paginator.page(paginator.num_pages) return render_to_response("list.html", dict(posts=posts, user=request.user, post_list=posts.object_list, months=mkmonth_lst())) 

models.py

 from django.db import models from django.contrib.auth.models import User from django.contrib import admin from django.core.mail import send_mail class Post(models.Model): title = models.CharField(max_length=60) body = models.TextField() created = models.DateTimeField(auto_now_add=True) def __unicode__(self): return self.title class Comment(models.Model): created = models.DateTimeField(auto_now_add=True) author = models.CharField(max_length=60) body = models.TextField() post = models.ForeignKey(Post) def __unicode__(self): return unicode("%s: %s" % (self.post, self.body[:60])) def save(self, *args, **kwargs): if "notify" in kwargs and kwargs["notify"] == True: message = "Comment was was added to '%s' by '%s': \n\n%s" % (self.post, self.author, self.body) from_addr = "no-reply@mydomain.com" recipient_list = ["myemail@mydomain.com"] send_mail("New comment added", message, from_addr, recipient_list) if "notify" in kwargs: del kwargs["notify"] super(Comment, self).save(*args, **kwargs) 

pipe理员

 class PostAdmin(admin.ModelAdmin): search_fields = ["title"] display_fields = ["title", "created"] class CommentAdmin(admin.ModelAdmin): display_fields = ["post", "author", "created"] 

谢谢!

看起来你正试图发送一个邮件( send_mail() ),你的settings.py中的邮件设置不正确。

您应该检查发送电子邮件的文档。


为了进行debugging,您可以使用以下命令设置本地smtpserver:

 python -m smtpd -n -c DebuggingServer localhost:1025 

并相应地调整您的邮件设置:

 EMAIL_HOST = 'localhost' EMAIL_PORT = 1025 

这是logging在这里: testing电子邮件发送

作为启动专用debugging服务器的替代方法,您可以使用最近添加到Django中的console.EmailBackend

开发和testing:

在Django 1.6+中,我们可以在settings.py中添加这一行

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

这将在控制台上显示Easy Verification的邮件。

注意:邮件不会被发送到Msg.Its中指定的收件人仅用于开发和testing。

为此,您需要configurationDoc中给出的SMTP服务器。

参考: Django文档发送电子邮件

在你的服务器上安装postfix包,它可以工作。 如果是Ubuntu的话,试试吧:

 sudo apt-get install postfix 

在你的设置中,把:

 EMAIL_HOST = 'localhost' 

我们最近离开了Pythondebugging电子邮件服务器,使用一个名为Mailcatcher的程序。 Mailcatcher作为一个守护进程运行,将所有的testing邮件拦截到端口1025,并与一个Web服务器集成在一起,这样你就可以从浏览器中查看拦截的邮件。 优点

  • 如果需要,您可以将testing电子邮件视为HTML
  • 所有testing电子邮件的中央pipe理 – 他们留下来,直到你清除它们
  • 从任何浏览器查看testing电子邮件,而不是通过terminal窗口滚动

你可以阅读更多,并在这里下载: http : //rubygems.org/gems/mailcatcher

如果你不喜欢Ruby,我的同事已经将Mailcatcher的function移植到node.js – 在这里查看MailDev: http ://djfarrelly.github.io/MailDev/

另外以下内容将有所帮助:

将以下最小设置放在服务器上的settings.py或local_settings.py文件中。

 EMAIL_HOST = 'localhost' EMAIL_PORT = 587 EMAIL_USE_TLS = True 

而不是使用smtp.gmail.com这有很多限制,你可以有你自己的邮件服务器。

你可以通过安装你自己的mailserver来完成:

 sudo apt-get install sendmail 

我也遇到这个错误。 我决定使用postfix来设置自己的邮件服务器,而不是使用Gmail。 在这里看到我的理由。

在Ubuntu 12.04上安装postfix:

 sudo apt-get install postfix 

然后,将configuration文件复制到/ etc / postfix /:

 cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf 

将下面几行添加到main.cf中

 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mydestination = localhost 

重新加载configuration文件:

 /etc/init.d/postfix reload 

testing并查看postfix是否正在工作:

 telnet localhost 25 

然后逐行input以下内容:

 mail from: whatever@whatever.com rcpt to: your_real_email_addr@blah.com data (press enter) type whatever content you feel like to type . (put an extra period on the last line and then press enter again) 

如果有效,你应该看到这样的事情:

 250 2.0.0 Ok: queued as CC732427AE 

接下来,把下面这行放到Django的settings.py中

 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'localhost' EMAIL_PORT = 25 EMAIL_HOST_USER = '' EMAIL_HOST_PASSWORD = '' EMAIL_USE_TLS = False DEFAULT_FROM_EMAIL = 'Server <server@whatever.com>' 

要testingDjango是否可以通过postfix发送邮件,请打开Django shell:

 ./manage.py shell >>> from django.core.mail import send_mail >>> send_mail('Subject here', 'Here is the message.', 'from@example.com', ['to@example.com'], fail_silently=False) 

检查您的垃圾邮件收件箱,你应该看到上面显示的电子邮件。

安装postfix为我做了。

在这里似乎没有答案是合适的upvoted,所以这个页面可能有点混乱。 请注意以下文档: https : //docs.djangoproject.com/en/1.3/ref/settings/#std : setting-EMAIL_HOST

参数settings.py具有默认值。

当我安装了postfix时,至less在本地修复了这个问题。

希望这有助于另一个困惑的灵魂!

EMailDump是可用和有用的本地服务器smtp,安装方便,这在Python开发https://github.com/ThiefMaster/maildump