Django Form 组件


Django Form 组件

Django是一个开放源代码的Web框架,同样有一个强大的表单组件,允许开发人员轻松地创建表单并进行验证。在这篇文章中,我们将详细介绍Django Form组件。

表单

表单是用于收集用户在Web应用程序中输入的数据的HTML元素。 在Django中,Form组件是该表单与后端数据存储的桥梁。

建立一个表单

要创建一个表单,您必须从django.forms.Form类派生出一个新的类。 在这个新类中,您可以定义字段,以及这些字段应该如何验证。

有两种方式来定义表单:

  1. 手动创建表单字段

     ```
     from django import forms
    
     class ContactForm(forms.Form):
         subject = forms.CharField(max_length=100)
         message = forms.CharField(widget=forms.Textarea)
         sender = forms.EmailField()
         cc_myself = forms.BooleanField(required=False)
     ```
    
     这个表单包含4个字段:一个文本字段“subject”(最多100个字符)、多行文本字段“message”、电子邮件字段“sender”以及一个布尔字段“cc_myself”。
    
  2. 通过模型自动创建表单字段

     ```
     from django import forms
     from .models import Contact
    
     class ContactForm(forms.ModelForm):
         class Meta:
             model = Contact
             fields = ('name', 'email', 'subject', 'message')
     ```
    
     当您有一个与表单相关联的模型时,这是一种更方便的方法。 `Meta`类定义了表单从模型中使用的字段。
    

表单验证

表单验证是确保表单数据有效性的过程。 在Django中,表单验证在提交表单时自动运行。

要定义表单验证,请为字段添加验证。您可以使用默认验证器,例如min_lengthmax_lengthrequired,或编写自己的验证器。

	```
	from django import forms

	class ContactForm(forms.Form):
	    subject = forms.CharField(max_length=100)
	    message = forms.CharField(widget=forms.Textarea)
	    sender = forms.EmailField()
	    cc_myself = forms.BooleanField(required=False)

	    def clean_subject(self):
	        subject = self.cleaned_data['subject']
	        if "some bad content" in subject:
	            raise forms.ValidationError("Content contained inappropriate words")
	        return subject
	```
	
	在这个例子中,“clean_subject”是`clean`方法中的一个字段特定的验证,用于检查还有不良字词。 如果包含不良字词,它将抛出`ValidationError`异常。

表单呈现

当表单定义完毕并验证通过后,您需要将其呈现给用户。 可以使用模板系统和视图来完成这一操作。

```
from django.shortcuts import render
from .forms import ContactForm

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # process the data in form.cleaned_data as required
            return HttpResponseRedirect('/thanks/')
    else:
        form = ContactForm()
    return render(request, 'contact.html', {'form': form})
```

在视图中,您可以使用`POST`和`GET`请求方式和呈现模板使表单呈现在web应用程序中。

结论

Django的表单组件是一种强大的工具,可以帮助开发人员轻松地处理针对用户输入数据的验证和处理。通过本文的介绍,您可以轻松地创建表单、定义验证和在web应用程序中呈现表单。