Django – Connexion refusée

quand je publie un commentaire, ne pas enregistrer, plante (erreur: [Errno 111] Connexion refusée), pourquoi?

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.consortingb.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.consortingb.auth.models import User from django.consortingb 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) 

Admin

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

Merci!

On dirait que vous essayez d’envoyer un courrier ( send_mail() ) et que vos parameters de messagerie dans vos settings.py ne sont pas corrects.

Vous devriez vérifier les documents pour envoyer des emails .


Pour le débogage, vous pouvez configurer un serveur smtpserver local avec cette commande:

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

et ajustez vos parameters de messagerie en conséquence:

 EMAIL_HOST = 'localhost' EMAIL_PORT = 1025 

Ceci est documenté ici: Test d’envoi de courrier électronique

Au lieu de démarrer un serveur de débogage dédié, vous pouvez utiliser la console.EmailBackend qui a été ajoutée à Django récemment.

Pour le développement et les tests:

Dans Django 1.6+, nous pouvons simplement append cette ligne dans settings.py

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

Cela affichera le courrier sur la console pour la vérification facile.

Remarque: le courrier ne sera pas envoyé au destinataire spécifié dans Msg.Its uniquement pour le développement et les tests.

Pour cela, vous devez configurer le serveur SMTP indiqué dans le document.

Pour référence: Documentation Django pour l’envoi de courrier électronique

Installez le package postfix sur votre serveur et cela fonctionne. Si c’est Ubuntu, essayez:

 sudo apt-get install postfix 

Dans vos parameters, mettez:

 EMAIL_HOST = 'localhost' 

Nous nous sums récemment éloignés du serveur de messagerie de débogage Python pour utiliser un programme appelé Mailcatcher. Mailcatcher s’exécute en tant que démon pour intercepter tous vos e-mails de test sur le port 1025, et est intégré à un serveur Web afin que vous puissiez ensuite afficher les e-mails interceptés à partir d’un navigateur. Avantages

  • vous pouvez afficher les e-mails de test en HTML si nécessaire
  • gestion centralisée de tous les e-mails de test – ils restnt autour jusqu’à ce que vous les effaciez
  • afficher les e-mails de test depuis n’importe quel navigateur, au lieu de faire défiler la fenêtre du terminal

Vous pouvez en lire plus et le télécharger ici: http://rubygems.org/gems/mailcatcher

Si vous n’aimez pas Ruby, un de mes collègues a porté les fonctionnalités de Mailcatcher sur node.js – consultez MailDev ici: http://djfarrelly.github.io/MailDev/

En outre, ce qui suit aidera:

placez les parameters minimaux suivants dans le fichier settings.py ou local_settings.py sur votre serveur.

 EMAIL_HOST = 'localhost' EMAIL_PORT = 587 EMAIL_USE_TLS = True 

au lieu d’utiliser smtp.gmail.com qui impose beaucoup de limitations, vous pouvez avoir votre propre serveur de messagerie.

vous pouvez le faire en installant votre propre serveur de messagerie:

 sudo apt-get install sendmail 

Je rencontre également cette erreur. Au lieu d’utiliser gmail, j’ai décidé de configurer mon propre serveur de messagerie en utilisant postfix. Voir mes raisons ici.

Pour configurer postfix sur Ubuntu 12.04:

 sudo apt-get install postfix 

Ensuite, copiez le fichier de configuration dans / etc / postfix /:

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

Ajoutez les lignes suivantes à main.cf :

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

Rechargez le fichier de configuration:

 /etc/init.d/postfix reload 

Pour tester et voir si postfix fonctionne:

 telnet localhost 25 

Ensuite, entrez la ligne suivante ligne par ligne:

 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) 

Si cela fonctionne, vous devriez voir quelque chose comme ceci:

 250 2.0.0 Ok: queued as CC732427AE 

Ensuite, placez la ligne suivante dans les parameters de votre Django:

 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 ' 

Pour tester si Django peut envoyer des emails via postfix, ouvrez le shell Django:

 ./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) 

Vérifiez votre boîte de réception de courrier indésirable et vous devriez voir le message ci-dessus.

L’installation de postfixe l’a fait pour moi.

Il semble y avoir aucune réponse ici qui a été convenablement votée, alors cette page peut être un peu déroutante. Remarque dans la documentation: https://docs.djangoproject.com/en/1.3/ref/settings/#std:setting-EMAIL_HOST

les parameters settings.py ont des valeurs par défaut.

Lorsque j’ai installé postfix, il a corrigé le problème, au moins localement.

J’espère que cela aide une autre âme confuse!

EMailDump est un serveur local utilisable et utile , facile à installer, ceci a été développé en python https://github.com/ThiefMaster/maildump