使用 ModelForm 的 Django 联系表
Posted
技术标签:
【中文标题】使用 ModelForm 的 Django 联系表【英文标题】:Django Contact Form using ModelForm 【发布时间】:2015-03-10 22:40:00 【问题描述】:我正在尝试创建一个既可以发送电子邮件又可以存储消息的联系表单。我想我的 model.py、forms.py 和 admin.py 是正确的,并且我能够创建和存储(不是电子邮件) 来自管理员的消息。但我正在努力处理必须通过电子邮件发送和存储消息的 view.py。
model.py:
from django.db import models
from django.contrib import admin
class Contact(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
message = models.TextField(max_length=10)
date_created = models.DateField(verbose_name="Created on date", auto_now_add="True")
class ContactAdmin(admin.ModelAdmin):
list_display = ('name', 'email', 'message', 'date_created')
forms.py:
from django import forms
from .models import Contact
class ContactForm(forms.Form):
name = forms.CharField()
email = forms.EmailField()
当涉及到 views.py 时,我需要一些指导来整理 def contact(request):
的代码。我想我必须包含这些模块:
from django.conf import settings
from django.shortcuts import render, HttpResponseRedirect, HttpResponse, Http404
from django.core.mail import send_mail
from .forms import ContactForm
from .models import Contact
说到模板部分,我不知道如何使用模板标签在html中呈现联系表单。
所以,我需要帮助来找出正确的 view 和 template 代码。我当然也愿意接受其他代码的建议 - 因为你可能猜到了,这是我的第一个真正的 Django 应用。
谢谢!
【问题讨论】:
【参考方案1】:类似这样的:
我会使用 django ModelForm 来生成表单:
class ContactForm(forms.ModelForm):
class Meta:
model = Contact
exclude = ('date_created', )
文档:https://docs.djangoproject.com/en/1.7/topics/forms/modelforms/#modelform
FormView 用于实际视图:
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 = "email_form.html"
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\n0".format(form.cleaned_data.get('message'))
send_mail(
subject=form.cleaned_data.get('subject').strip(),
message=message,
from_email='contact-form@myapp.com',
recipient_list=[settings.LIST_OF_EMAIL_RECIPIENTS],
)
form.save()
return super(ContactFormView, self).form_valid(form)
文档:https://docs.djangoproject.com/en/1.7/ref/class-based-views/generic-editing/#formview
还有你的模板:
% extends 'base.html' %
% block title %Send an email% endblock %
% block content %
<div class="row">
<div class="span6">
<h1>Send an email</h1>
<form action="." method="post">
% csrf_token %
form
<input type="submit" value="Submit" />
</form>
</div>
</div>
% endblock %
% block extrajs %
<script src=" STATIC_URL js/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
$(function()
$('#id_name').focus()
);
</script>
% endblock %
文档:https://docs.djangoproject.com/en/1.7/topics/forms/#the-template
【讨论】:
以上是关于使用 ModelForm 的 Django 联系表的主要内容,如果未能解决你的问题,请参考以下文章