python - 在 Django 中设置代理

标签 python django proxy

我正在尝试使用 django.core.mail.send_mail() 发送电子邮件。但是,当我尝试提交表单时出现以下错误。

这是我遇到的错误:

Request Method: POST
Request URL: http://127.0.0.1:8000/contact/

Django Version: 1.8.10
Python Version: 2.7.6
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'newsletter',
 'Contact')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware')


Traceback:
File "/home/sumit/Desktop/Home/Django/local/lib/python2.7/site-packages/Django-1.8.10-py2.7.egg/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/sumit/Desktop/Home/Django/src/Contact/views.py" in contact
  25.           fail_silently=False
File "/home/sumit/Desktop/Home/Django/local/lib/python2.7/site-packages/Django-1.8.10-py2.7.egg/django/core/mail/__init__.py" in send_mail
  62.     return mail.send()
File "/home/sumit/Desktop/Home/Django/local/lib/python2.7/site-packages/Django-1.8.10-py2.7.egg/django/core/mail/message.py" in send
  303.         return self.get_connection(fail_silently).send_messages([self])
File "/home/sumit/Desktop/Home/Django/local/lib/python2.7/site-packages/Django-1.8.10-py2.7.egg/django/core/mail/backends/smtp.py" in send_messages
  100.             new_conn_created = self.open()
File "/home/sumit/Desktop/Home/Django/local/lib/python2.7/site-packages/Django-1.8.10-py2.7.egg/django/core/mail/backends/smtp.py" in open
  58.             self.connection = connection_class(self.host, self.port, **connection_params)
File "/usr/lib/python2.7/smtplib.py" in __init__
  256.             (code, msg) = self.connect(host, port)
File "/usr/lib/python2.7/smtplib.py" in connect
  316.         self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python2.7/smtplib.py" in _get_socket
  291.         return socket.create_connection((host, port), timeout)
File "/usr/lib/python2.7/socket.py" in create_connection
  553.     for res in getaddrinfo(host, port, 0, SOCK_STREAM):

Exception Type: gaierror at /contact/
Exception Value: [Errno -2] Name or service not known

这是我的 views.py 文件。

from django.shortcuts import render
from .forms import ContactUsForm
from django.core.mail import send_mail
from django.conf import settings

def contact(request):
    form = ContactUsForm(request.POST or None)
    context = {
        "title" : "Contact", 
        "form" : form,
    }
    if form.is_valid():
        form_email = form.cleaned_data.get("email")
        form_full_name = form.cleaned_data.get("full_name")

        subject = "Sent via django"
        from_email = settings.EMAIL_HOST_USER
        to_email = [form_email]
        contact_message = "Thank you %s " %(form_full_name)

        send_mail(subject, 
            contact_message, 
            from_email, 
            to_email,
            fail_silently=False
            )
        context = {
            "title" : "Thank you for your feedback ! "
        }
        form.save()
    return render(request, "contact.html", context)

表单.py:

from django import forms
from .models import ContactUs

class ContactUsForm(forms.ModelForm):
    class Meta:
        model = ContactUs
        fields = ["full_name", "email", "message"]

模型.py

from django.db import models

# Create your models here.
class ContactUs(models.Model):
    full_name = models.CharField(max_length=120, blank=True)
    email = models.EmailField()
    message = models.CharField(max_length=100, blank=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now=True, auto_now_add=False)

    def __unicode__(self):
        return self.email

我在我的终端中设置了代理变量:

export https_proxy="https://username:password@myproxy:myport"
export http_proxy="http://username:password@myproxy:myport"
export socks_proxy="socks://username:password@myproxy:myport"
export ftp_proxy="ftp://username:password@myproxy:myport"

如何修复此错误?请帮忙。

最佳答案

你有没有在settings.py文件中设置需要的参数?

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

它的 gaierror 在你的 HOST 参数中应该是:

HOST = ' ' (without space)

Don't use with space HOST = ' '

关于python - 在 Django 中设置代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35846023/

相关文章:

django - 在基于 Django 类的 View 中覆盖 get() 以进行过滤

python - 当 Django 中加载所有 url 时发出信号

python - 使用覆盖率,我如何测试这条线?

php - 通过 PHP 检测具有代理服务器的客户端

python - 安装 Browsermob 代理以获取 HTTP 代码

python - 如何有条件地将值分配给列?

Python Pandas - 重命名和合并 3 个数据集

python - 如何使用 Gtk 3.0 和 WebKit2 4.0 处理 Python 中的链接点击?

python - 将数据分入范围

c - 如何在 Windows 7 中检索 Windows 服务的系统代理设置