Django ModelForm操作及验证方式
Django是一个流行的Web框架,它对MVC(Model-View-Controller)的实现方式进行了改进,采用了MTV(Model-Template-View)的方式。其中Model用于表示应用程序中的数据结构,Template用于表示处理和呈现数据的方式,View则负责处理请求并生成响应。
在Django中,我们可以使用ModelForm来快速创建表单,并自动处理表单验证和数据存储。本文将介绍如何使用Django ModelForm操作表单和验证表单。
1. 创建Model
首先,我们需要创建一个Django Model。这个Model将用于描述我们要处理的数据结构。例如,我们将创建一个名为Contact的Model,其中包含我们需要存储的联系人的信息。
# models.py
from django.db import models
class Contact(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField(max_length=50)
phone = models.CharField(max_length=20)
def __str__(self):
return self.name
以上代码创建了一个Contact Model,其中包含名称、电子邮件和电话号码。我们还定义了一个__str__函数,它将我们的Model以名称的形式返回。
2. 创建ModelForm
接下来,我们需要使用ModelForm来创建表单。我们可以使用以下代码创建ContactForm:
# forms.py
from django import forms
from .models import Contact
class ContactForm(forms.ModelForm):
class Meta:
model = Contact
fields = ['name', 'email', 'phone']
以上代码创建了一个ModelForm,其中包含name、email和phone字段。我们将表单连接到Contact Model,这将使用ModelForm来自动生成表单字段和验证规则。
3. 创建View
接下来,我们需要使用View来处理表单。在这个示例中,我们将使用基于函数的视图来处理表单。以下是一个示例视图:
# views.py
from django.shortcuts import render
from .forms import ContactForm
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
# 处理表单数据
return HttpResponse('表单已提交!')
else:
form = ContactForm()
return render(request, 'contact.html', {'form': form})
以上代码创建了一个名为contact()的View。在POST请求中,我们使用ContactForm实例来验证表单,如果它是有效的,则处理表单数据并返回表单已提交的消息。在GET请求中,我们创建一个新的ContactForm实例,并将它传递到模板中,以便Django可以为我们渲染表单。
4. 创建Template
最后,我们需要使用模板来渲染表单。我们将使用Django的模板系统来将表单呈现为HTML。以下是contact.html模板的示例代码:
{% extends "base.html" %}
{% block content %}
联系我们
{% endblock %}
以上代码使用了Django的模板系统,并将form呈现为一个带有CSRF令牌的表单。我们使用{{ form.as_p }}将表单呈现为一组段落,其中每个字段表示为标签和输入表单。
5. 表单验证
在以上步骤中,我们已创建了一个Model、一个ModelForm和一个View,并连接了它们来处理表单。但是,我们还需要验证表单数据以确保它符合我们的要求。
例如,我们可能希望验证用户输入的电子邮件地址是否有效、是否包含电话号码等等。这些验证规则可以通过Django Form Fields和Validators来定义。
以下是一些示例Field和Validator的代码:
# forms.py
from django import forms
from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError
from .models import Contact
class ContactForm(forms.ModelForm):
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$',
message="电话号码不符合规范,格式: '+999999999'. 最多15位数字.")
name = forms.CharField(required=True, max_length=50)
email = forms.EmailField(required=True, max_length=50)
phone = forms.CharField(validators=[phone_regex], required=True, max_length=20)
def clean_phone(self):
phone = self.cleaned_data['phone']
if len(phone) < 10:
raise ValidationError('电话号码长度至少为10位!')
return phone
class Meta:
model = Contact
fields = ['name', 'email', 'phone']
以上代码将添加两个新的Validators来验证电话号码。它还将添加一个自定义的Validator clean_phone(),它将验证电话号码是否包含至少10个数字。
6. 结论
通过使用Django ModelForm,我们可以轻松地创建和操作表单,并使用Django的模板系统轻松地将它们呈现为HTML。我们还可以使用Form Fields和Validators轻松地验证表单数据。