from django import forms
class ContactForm(forms.Form):
subject = forms.CharField()
email = forms.EmailField(required=False)
message = forms.CharField()
from django.shortcuts import render
from contact.forms import ContactForm
from django.http import HttpResponseRedirect
from django.core.mail import send_mail
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
send_mail(
cd['subject'],
cd['message'],
cd.get('email', 'noreply@example.com'),
['siteowner@example.com'],
)
return HttpResponseRedirect('/contact/thanks/')
else:
form = ContactForm()
return render(request, 'contact_form.html', {'form': form})
?
?
contact_form.html
?
{{ form.as_table }}
{% csrf_token %}
?
上面的例子有个缺陷,message这个表单变成了 input type=“text”。
我们可以通过设置widget来修改它:
?
from django import forms
class ContactForm(forms.Form):
subject = forms.CharField()
email = forms.EmailField(required=False)
message = forms.CharField(widget=forms.Textarea)
?
还可以设置最大长度
设置max_length
?
from django import forms
class ContactForm(forms.Form):
subject = forms.CharField(max_length=20)
email = forms.EmailField(required=False)
message = forms.CharField(widget=forms.Textarea)
?
设置初始值:
?
在view.py中ContectForm中添加 initial 参数:
?
from django.shortcuts import render
from contact.forms import ContactForm
from django.http import HttpResponseRedirect
from django.core.mail import send_mail
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
cd