when I post a comment, do not save, crashes (error: [Errno 111] Connection refused), why?
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 = "[email protected]"
recipient_list = ["[email protected]"]
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"]
thanks!
Looks like you are trying to send a mail (send_mail()
) and your mail settings in your settings.py
are not correct.
You should check the docs for sending emails.
For debugging purposes you could setup a local smtpserver with this command:
python -m smtpd -n -c DebuggingServer localhost:1025
and adjust your mail settings accordingly:
EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025
This is documented here: Testing e-mail sending
As an alternative to starting a dedicated debugging server you could use the console.EmailBackend
which was added to Django recently.
For Development and Testing:
In Django 1.6+ we can just add this line in settings.py
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
This will display the mail on the console for Easy Verification.
Note: Mail will not be sent to the specified recipient in Msg.Its just for Development and Testing.
For that you need to configure SMTP server which is given in the Doc.
For Reference: Django Documentation for Sending Email
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With