创建一个表单来分享帖子。
Django有一个内置的表单框架允许你通过简单的方式来创建表单。这个表单框架允许你定义你的表单字段,指定这些字段必须展示的方式,以及指定这些字段如何验证输入的数据。Django表单框架还提供了一种灵活的方式来渲染表单以及操作数据。
Django提供了两个可以创建表单的基本类:• Form: 允许你创建一个标准表单
• ModelForm: 允许你创建一个可用于创建或者更新model实例的表单
首先,在你blog应用的目录下创建一个forms.py文件,输入以下代码:
from django import forms
class EmailPostForm(forms.Form):
name = forms.CharField(max_length=25)
email = forms.EmailField()
to = forms.EmailField()
comments = forms.CharField(required=False,widget=forms.Textarea)
表单可以存在你的Django项目的任何地方,但按照惯例将它们放在每一个应用下面的forms.py文件中。
name字段是一个CharField。这种类型的字段被渲染成<input type=“text”>HTML元素。每种字段类型都有默认的控件来确定它在HTML中的展示形式。通过改变控件的属性可以重写默认的控件。在comment字段中,我们使用<textarea></textarea>HTML元素而不是使用默认的<input>元素来显示它。
字段验证取决于字段类型。例如,email和to字段是EmailField,这两个字段都需要一个有效的email地址,否则字段验证将会抛出一个forms.ValidationError异常导致表单验证不通过。在表单验证的时候其他的参数也会被考虑进来:我们将name字段定义为一个最大长度为25的字符串;通过设置required=False让comments的字段可选。所有这些也会被考虑到字段验证中去。目前我们在表单中使用的这些字段类型只是Django支持的表单字段的一部分。要查看更多可利用的表单字段,你可以访问:https://docs.djangoproject.com/en/1.8/ref/forms/fields/
在视图(views)中操作表单
当表单成功提交后你必须创建一个新的视图(views)来操作表单和发送email。编辑blog应用下的views.py文件,添加以下代码:
from django.shortcuts import render, get_object_or_404
from .models import Post
from .forms import EmailPostForm
from django.core.email import send_mail
def post_share(request, post_id):
# retrieve post by id
post = get_object_or_404(Post, id=post_id, status='published')
if request.method == 'POST':
# Form was submitted
form = EmailPostForm(request.POST)
if form.is_valid():
# Form fields passed validation
cd = form.cleaned_data
# ... send email 这里就可以做很多事情了
#post_url = request.build_absolute_url(post.get_absolute_url())
subject = '{} ({}) recommends you reading "{}"'.format(cd['name'], cd['email'], post.title)
message = 'Read "{}" at\n{}\'s comments: {}'.format(post.title, cd['name'], cd['comments'])
send_mail(subject, message, 'admin@myblog.com',[cd['to']])
form = EmailPostform()
return render(request, 'blog/post/share.html', {'post': post,'form: form})
可能有点不完整,但作为表单的参考代码在忘记的时候可以快速回忆。