【问题标题】:Contact Form in djangodjango中的联系表格
【发布时间】:2014-05-29 02:46:27
【问题描述】:

我有一个联系表格,所有工作都没有任何错误,我唯一不明白的是当我点击发送按钮时没有收到消息,谁能告诉我为什么或什么问题,好吗? 我只有一页叫联系,没有感谢页! 谢谢

这是我的代码: 模型.py 从 django.db 导入模型

class Subject(models.Model):
    question_  = 0
    question_one = 1
    question_two = 2
    question__three = 3

    STATUS_CHOICES = (
        (question_, ''),
        (question_one, 'I have a question'),
        (question_two, 'Help/Support'),
        (question__three, 'Please give me a call'),
        )

class Contact(models.Model):
    name    = models.CharField(max_length=100)
    email   = models.EmailField(max_length=150)
    subject = models.CharField(choices=Subject.STATUS_CHOICES, default=1, max_length=100)
    phone_number  = models.IntegerField()
    message = models.TextField()

    def save(self, *args, **kwargs):
        super(Contact, self).save(*args, **kwargs)
        return 'Contact.save'

froms.py

from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit
import floppyforms as forms

from django_enumfield import enum

class SubjectEnum(enum.Enum):
    question_  =0
    question_one = 1
    question_two = 2
    question__three = 3

    STATUS_CHOICES = (
        (question_, ''),
        (question_one, 'I have a question'),
        (question_two, 'Help/Support'),
        (question__three, 'Please give me a call'),
        )


class ContactForm(forms.Form):
    name = forms.CharField(required=True)
    email = forms.EmailField(required=True)
    subject = forms.TypedChoiceField(choices=SubjectEnum.STATUS_CHOICES, coerce=str)
    phone_number = forms.IntegerField(required=False)
    message = forms.CharField(widget=forms.Textarea)


    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.add_input(Submit('submit', 'Submit'))
        super(ContactForm, self).__init__(*args, **kwargs)

views.py

from django.conf import settings
from django.core.mail import send_mail
from django.views.generic import FormView
from .forms import ContactForm

class ContactFormView(FormView):
    form_class = ContactForm
    template_name = "contact/email_form.jade"
    success_url = '/email-sent/'

    def form_valid(self, form):
        message = "{name} / {email} said: ".format(
            name=form.cleaned_data.get('name'),
            email=form.cleaned_data.get('email'))
        message += "\n\n{0}".format(form.cleaned_data.get('message'))
        send_mail(
            subject=form.cleaned_data.get('subject').strip(),
            message=message,
            from_email="info@example.com",
            recipient_list=[settings.LIST_OF_EMAIL_RECIPIENTS],
        )
        return super(ContactFormView, self).form_valid(form)

【问题讨论】:

  • 表单是否有效? IE。是调用 form_valid() 还是调用 form_invalid()?
  • 据我了解是被调用的有效形式。我得到了这个,因为测试已经创建了联系模型和下拉主题。这样做的想法是保存从表单收到的所有电子邮件。

标签: python django email send contact


【解决方案1】:

有一种更简洁更好的方法,

class Subject(models.Model):
        question_  = 0
        question_one = 1
        question_two = 2
        question__three = 3

    STATUS_CHOICES = (
        (question_, ''),
        (question_one, 'I have a question'),
        (question_two, 'Help/Support'),
        (question__three, 'Please give me a call'),
        )

你不需要新的类,只是这个,你看到 0,1,2,3 是识别每个选择的地方,你可以在第一部分放任何东西,例如0,1,2,3,或“IHAQ”的缩写,是“我有一个问题”

STATUS_CHOICES = (
        ("0", ""),
        ("1", "I have a question"),
        ("2", "Help/Support"),
        ("3", "Please give me a call"),
        )

【讨论】:

    【解决方案2】:

    这部分可能有问题:

    recipient_list=[settings.LIST_OF_EMAIL_RECIPIENTS],
    

    如果settings.LIST_OF_EMAIL_RECIPIENTS 已经是一个列表,那么您将它嵌套在另一个列表中。

    无论如何,作为一般规则,当某些东西不起作用时,您应该在调试器中单步执行代码或放置打印语句以查看代码运行时发生的情况。这将使您的过程更加轻松。

    【讨论】:

    • 感谢您的回复,不幸的是,当我单独运行此文件时,我得到了:文件“/home/vagrant/.virtualenvs/base/local/lib/python2.7/site-packages/ django/conf/__init__.py",第 47 行,在 _setup % (desc, ENVIRONMENT_VARIABLE)) django.core.exceptions.ImproperlyConfigured:请求设置 DEFAULT_INDEX_TABLESPACE,但未配置设置。您必须在访问设置之前定义环境变量 DJANGO_SETTINGS_MODULE 或调用 settings.configure()。
    • 你不应该单独运行这个文件。将打印语句放入该文件中,然后通过在浏览器中加载该页面来运行它。或者,更好的是,使用像 PyCharm 或 PyDev 这样的 IDE,您可以使用断点代替打印语句。
    • 嗨 RexE,关于我在 forms.py 文件和 views.py 文件之间遇到的错误与设置或上述问题无关。我已经问过给我表格的人。如果有人有想法或任何帮助,非常感谢。
    • 问题出在这两个文件 form.py 和 view.py 之间。
    猜你喜欢
    • 2021-07-20
    • 2015-04-13
    • 2019-06-27
    • 2022-07-06
    • 2020-12-30
    • 2017-01-26
    • 2020-04-29
    • 2019-05-16
    • 1970-01-01
    相关资源
    最近更新 更多