Django的表单(Forms)是用于收集用户输入的一种方式。它们可以自动生成HTML元素,验证用户输入,并且如果验证失败,可以重新显示表单及其输入的数据。以下是Django表单的详细用法:
创建表单
在Django中,你可以通过继承django.forms.Form
类来创建自己的表单。每个表单字段都是一个字段类型,例如CharField
、EmailField
、ChoiceField
等。
from django import forms
class MyForm(forms.Form):
name = forms.CharField(label='Your name', max_length=100)
email = forms.EmailField()
birthday = forms.DateField(widget=forms.SelectDateWidget)
使用表单
在视图中,你可以实例化表单并将其传递给模板。如果请求是POST类型,你可以将request.POST
传递给表单实例,这样表单就会自动填充数据。
def my_view(request):
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
# 处理表单数据
name = form.cleaned_data['name']
email = form.cleaned_data['email']
# ...
return HttpResponseRedirect('/success/')
else:
form = MyForm()
return render(request, 'my_template.html', {'form': form})
渲染表单
在模板中,你可以使用几种不同的方法来渲染表单:
{{ form.as_p }}
:将每个字段渲染为一个包含label和field的<p>
标签。{{ form.as_table }}
:将字段渲染为一个表格,每个字段一行。{{ form.as_ul }}
:将字段渲染为一个无序列表。
或者,你可以手动渲染每个字段:
<form method="post">
{% csrf_token %}
{{ form.name }}
{{ form.email }}
{{ form.birthday }}
<input type="submit" value="Submit">
</form>
表单验证
Django表单可以自动验证数据。如果表单数据无效,form.is_valid()
将返回False
,并且form.errors
将包含错误信息。
ModelForm
如果你的表单是为了编辑Django模型,你可以使用ModelForm
来自动创建表单字段和验证。
from django.forms import ModelForm
from myapp.models import MyModel
class MyModelForm(ModelForm):
class Meta:
model = MyModel
fields = ['name', 'email']
Formsets
如果你需要处理多个相同类型的表单,你可以使用Formset
。
from django.forms import formset_factory
BookForm = formset_factory(BookForm, extra=3)
自定义字段验证
你可以在表单类中定义clean_<fieldname>()
方法来自定义字段验证。
def clean_name(self):
name = self.cleaned_data.get('name')
if name == "badword":
raise forms.ValidationError("This is a bad word")
return name
表单和模型
如果你的表单是为了编辑模型,你可以使用ModelForm
来自动创建表单字段和验证。ModelForm
会根据模型的字段自动生成相应的表单字段。
表单媒体
如果你的表单使用了例如FileField
这样的字段,你可能需要在模板中渲染表单媒体。
{{ form.media }}
表单安全
Django表单提供了跨站请求伪造(CSRF)保护。在模板中,你需要使用{% csrf_token %}
来确保表单的安全性。
表单错误消息
你可以为每个字段自定义错误消息,例如:
name = forms.CharField(min_length=4, label="姓名", error_messages={"min_length": "你太短了", "required": "该字段不能为空!"})
以上是Django表单的基本用法,通过这些方法,你可以创建、渲染、验证和处理表单数据。