当我发表评论时,不要保存,崩溃(错误:[Errno 111]连接拒绝),为什么?
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()))
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)
class PostAdmin(admin.ModelAdmin): search_fields = ["title"] display_fields = ["title", "created"] class CommentAdmin(admin.ModelAdmin): display_fields = ["post", "author", "created"]
谢谢!
看起来你正在尝试发送邮件(send_mail()
)和您的邮件设置你settings.py
是不正确的.
您应该查看发送电子邮件的文档.
出于调试目的,您可以使用以下命令设置本地smtpserver:
python -m smtpd -n -c DebuggingServer localhost:1025
并相应地调整您的邮件设置:
EMAIL_HOST = 'localhost' EMAIL_PORT = 1025
这在此处记录:测试电子邮件发送
作为启动专用调试服务器的替代方法,您可以使用console.EmailBackend
最近添加到Django的服务器.
用于开发和测试:
在Django 1.6+中,我们可以在settings.py中添加此行
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
这将在控制台上显示邮件以进行简易验证.
注意: 邮件不会发送到Msg.Its中的指定收件人,仅用于开发和测试.
为此,您需要配置Doc中给出的SMTP服务器.
供参考:用于发送电子邮件的Django文档
在您的服务器上安装postfix包,它的工作原理.如果是ubuntu,请尝试:
sudo apt-get install postfix
在您的设置中,放置:
EMAIL_HOST = 'localhost'
我们最近离开了Python调试电子邮件服务器,使用了一个名为Mailcatcher的程序.Mailcatcher作为守护进程运行,拦截所有测试电子邮件到端口1025,并与Web服务器集成,以便您可以从浏览器查看截获的电子邮件.好处
如果需要,您可以将测试电子邮件视为HTML
所有测试电子邮件的集中管理 - 它们会一直存在,直到您清除它们为止
查看来自任何浏览器的测试电子邮件,而不是滚动终端窗口
您可以在此处阅读更多内容并下载:http: //rubygems.org/gems/mailcatcher
如果您不喜欢Ruby,我的同事已经将Mailcatcher的功能移植到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,它有很多限制,你可以拥有自己的邮件服务器.
你可以通过安装自己的邮件服务器来实现:
sudo apt-get install sendmail