Django Form 组件
封面图
•
2025-10-15
•
Django教程
3
0
0
0
Django 的 **Form 组件** 是一个非常强大的工具,用于处理 HTML 表单的渲染、数据验证和数据处理。它可以帮助你简化表单的创建、验证和处理过程,同时还能提供一些内置的功能如自动错误提示、字段类型转换等。 --- ## 📌 一、Django Form 的基本概念 ### 1. `forms.Form` - 用于创建自定义的表单类。 - 每个字段都是一个 `forms.Field` 类型的对象(如 `CharField`, `EmailField`, `BooleanField` 等)。 - 需要手动编写 `clean()` 方法进行额外的验证。 ### 2. `forms.ModelForm` - 绑定到 Django 的模型(Model)。 - 自动根据模型生成表单字段。 - 更加适合与数据库交互的场景。 --- ## 🧩 二、Django Form 的使用步骤 ### 1. 创建表单类(`forms.py`) ```python from django import forms class ContactForm(forms.Form): name = forms.CharField(label='Your name', max_length=100) email = forms.EmailField(label='Your email') message = forms.CharField(label='Your message', widget=forms.Textarea) def clean_message(self): message = self.cleaned_data.get('message') if len(message) < 10: raise forms.ValidationError("Message is too short.") return message ``` ### 2. 在视图中使用表单(`views.py`) ```python from django.shortcuts import render from .forms import ContactForm def contact(request): if request.method == 'POST': form = ContactForm(request.POST) if form.is_valid(): # 处理数据 name = form.cleaned_data['name'] email = form.cleaned_data['email'] message = form.cleaned_data['message'] # 发送邮件或保存到数据库... return render(request, 'success.html') else: form = ContactForm() return render(request, 'contact.html', {'form': form}) ``` ### 3. 在模板中渲染表单(`contact.html`) ```html <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Submit</button> </form> ``` --- ## ✅ 三、常用字段类型 | 字段类型 | 说明 | |----------|------| | `CharField` | 文本输入框 | | `EmailField` | 邮箱格式验证 | | `IntegerField` | 整数 | | `BooleanField` | 勾选框 | | `DateField` | 日期输入 | | `ChoiceField` | 下拉选择框 | | `ModelChoiceField` | 从模型中获取选项 | | `FileField` / `ImageField` | 文件上传 | --- ## 🔍 四、表单验证 ### 1. 自动验证 - 使用 `is_valid()` 方法触发所有字段的验证。 - 如果验证失败,可以通过 `form.errors` 查看错误信息。 ### 2. 自定义验证方法 - 可以在表单类中定义 `clean_<field_name>()` 方法对特定字段进行验证。 ```python def clean_email(self): email = self.cleaned_data['email'] if "example.com" in email: raise forms.ValidationError("Please use a real email address.") return email ``` --- ## 🔄 五、ModelForm 的使用 ### 1. 定义 ModelForm ```python from django.forms import ModelForm from .models import Book class BookForm(ModelForm): class Meta: model = Book fields = ['title', 'author', 'published_date'] ``` ### 2. 在视图中使用 ```python def create_book(request): if request.method == 'POST': form = BookForm(request.POST) if form.is_valid(): form.save() return redirect('book_list') else: form = BookForm() return render(request, 'book_form.html', {'form': form}) ``` --- ## 🎨 六、表单渲染方式 | 渲染方式 | 说明 | |----------|------| | `{{ form.as_p }}` | 每个字段用 `<p>` 包裹 | | `{{ form.as_table }}` | 每个字段用 `<tr>` 包裹 | | `{{ form.as_ul }}` | 每个字段用 `<li>` 包裹 | | `{{ form.field_name }}` | 单独渲染某个字段 | | `{{ form.errors }}` | 显示所有错误信息 | --- ## 💡 七、常见技巧 ### 1. 设置初始值 ```python form = ContactForm(initial={'name': 'John Doe'}) ``` ### 2. 自定义字段标签 ```python name = forms.CharField(label="Full Name") ``` ### 3. 添加 CSS 类 ```python name = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'})) ``` --- ## 📚 八、参考文档 - [Django官方文档 - Forms](https://docs.djangoproject.com/en/stable/topics/forms/) --- 如果你有具体的应用场景(比如登录表单、注册表单、文件上传等),我可以为你提供更详细的示例代码。需要吗?
上一篇:
Django 路由
下一篇:
Django 视图 - FBV 与 CBV
标题录入,一次不能超过6条
返回顶部
留言
留言
评论