Django – Connessione rifiutata

quando inserisco un commento, non salvare, si blocca (errore: [Errno 111] Connessione rifiutata), perché?

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 = "[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) 

Admin

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

Grazie!

Sembra che tu stia cercando di inviare una mail ( send_mail() ) e le tue impostazioni di posta nel tuo settings.py non sono corrette.

Dovresti controllare i documenti per l’ invio di e-mail .


A scopo di debug, è ansible configurare un smtpserver locale con questo comando:

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

e regola le tue impostazioni di posta di conseguenza:

 EMAIL_HOST = 'localhost' EMAIL_PORT = 1025 

Questo è documentato qui: testare l’invio di e-mail

In alternativa all’avvio di un server di debug dedicato, potresti utilizzare la console.EmailBackend che è stata recentemente aggiunta a Django.

Per sviluppo e test:

In Django 1.6+ possiamo aggiungere questa riga in settings.py

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

Questo mostrerà la posta sulla console per Easy Verification.

Nota: la posta non verrà inviata al destinatario specificato in Msg.Its solo per lo sviluppo e il test.

Per questo è necessario configurare il server SMTP che è indicato nel documento.

Per riferimento: documentazione di Django per l’invio di e-mail

Installa il pacchetto postfix sul tuo server e funziona. Se è ubuntu, provalo:

 sudo apt-get install postfix 

Nelle tue impostazioni, inserisci:

 EMAIL_HOST = 'localhost' 

Recentemente abbiamo abbandonato il server di posta elettronica di debug di Python per utilizzare un programma chiamato Mailcatcher. Mailcatcher viene eseguito come un demone per intercettare tutti i messaggi e-mail di test sulla porta 1025 ed è integrato con un server Web in modo da poter visualizzare le e-mail intercettate da un browser. vantaggi

  • puoi visualizzare e-mail di prova come HTML se necessario
  • gestione centralizzata di tutte le e-mail di prova: restano in attesa finché non vengono cancellate
  • visualizzare le e-mail di prova da qualsiasi browser, invece di scorrere la finestra del terminale

Puoi leggere di più e scaricarlo qui: http://rubygems.org/gems/mailcatcher

Se non ti piace Ruby, un mio collega ha portato la funzionalità di Mailcatcher a node.js – controlla MailDev qui: http://djfarrelly.github.io/MailDev/

Inoltre, quanto segue aiuterà:

inserisci le seguenti impostazioni minime nel file settings.py o local_settings.py sul tuo server.

 EMAIL_HOST = 'localhost' EMAIL_PORT = 587 EMAIL_USE_TLS = True 

invece di usare smtp.gmail.com che impone molte limitazioni, puoi avere il tuo server di posta.

puoi farlo installando il tuo mailserver:

 sudo apt-get install sendmail 

Ho anche incontrato questo errore. Invece di usare gmail, ho deciso di configurare il mio server di posta utilizzando postfix. Vedi le mie ragioni qui.

Per impostare postfix su Ubuntu 12.04:

 sudo apt-get install postfix 

Quindi, copia il file di configurazione in / etc / postfix /:

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

Aggiungi le seguenti righe a main.cf :

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

Ricarica il file di configurazione:

 /etc/init.d/postfix reload 

Per verificare e vedere se sta funzionando postfix:

 telnet localhost 25 

Quindi immettere la seguente riga per riga:

 mail from: [email protected] rcpt to: [email protected] data (press enter) type whatever content you feel like to type . (put an extra period on the last line and then press enter again) 

Se funziona, dovresti vedere qualcosa di simile a questo:

 250 2.0.0 Ok: queued as CC732427AE 

Quindi, inserisci la seguente riga nel settings.py di 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 ' 

Per verificare se Django può inviare email via postfix, apri la shell di Django:

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

Controlla la tua casella di posta spam e dovresti vedere l’email sopra mostrata.

l’installazione di Postfix lo ha fatto per me.

Sembrava che non ci fosse una risposta qui che fosse opportunamente upvoted, quindi questa pagina può essere un po ‘confusa. Avviso nella documentazione: https://docs.djangoproject.com/en/1.3/ref/settings/#std:setting-EMAIL_HOST

i parametri settings.py hanno valori predefiniti.

Quando ho installato postfix ha risolto il problema, almeno localmente.

Spero che questo aiuti un’altra anima confusa!

EMailDump è utilizzabile e utile server locale smtp, facile installazione, questo sviluppato in python https://github.com/ThiefMaster/maildump