Django ModelForm操作及验证方式

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 %}

联系我们

{% csrf_token %}

{{ form.as_p }}

{% 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轻松地验证表单数据。

后端开发标签