Django 表单
封面图
•
2025-10-19
•
Django教程
0
0
0
0
在 Django 中,**表单(Forms)** 是用于处理用户输入的机制。它可以帮助你: - 验证用户提交的数据 - 渲染 HTML 表单 - 处理表单提交 - 提供错误信息 Django 提供了两种主要的表单方式: --- ## 1. **`Form` 类(手动创建)** 你可以通过定义一个 `Form` 类来创建表单。 ### 示例代码: ```python # forms.py 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='Message', widget=forms.Textarea) ``` ### 在视图中使用: ```python # 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(): # 处理数据 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}) ``` ### 在模板中渲染表单: ```html <!-- contact.html --> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Submit</button> </form> ``` --- ## 2. **`ModelForm`(与模型绑定)** 如果你有一个模型,可以自动从模型生成表单。 ### 示例代码: ```python # models.py from django.db import models class Author(models.Model): name = models.CharField(max_length=100) bio = models.TextField() # forms.py from django.forms import ModelForm from .models import Author class AuthorForm(ModelForm): class Meta: model = Author fields = ['name', 'bio'] ``` ### 使用方式与 `Form` 类类似: ```python # views.py from .forms import AuthorForm def create_author(request): if request.method == 'POST': form = AuthorForm(request.POST) if form.is_valid(): form.save() return redirect('author-list') else: form = AuthorForm() return render(request, 'create_author.html', {'form': form}) ``` --- ## 3. **常用字段类型** | 字段类型 | 说明 | |------------------|------------------------| | `CharField` | 文本输入框 | | `EmailField` | 邮箱验证 | | `IntegerField` | 整数 | | `BooleanField` | 勾选框 | | `ChoiceField` | 下拉菜单 | | `DateField` | 日期选择 | | `FileField` | 文件上传 | | `ModelChoiceField` | 从模型中选择一个对象 | --- ## 4. **表单验证** - `is_valid()`:验证数据是否合法 - `cleaned_data`:获取验证后的数据 - `errors`:获取错误信息 ```python if form.is_valid(): ... else: print(form.errors) ``` --- ## 5. **自定义验证** 可以在 `Form` 或 `ModelForm` 中重写 `clean()` 方法进行自定义验证: ```python def clean(self): cleaned_data = super().clean() password = cleaned_data.get('password') confirm_password = cleaned_data.get('confirm_password') if password != confirm_password: raise forms.ValidationError("Passwords do not match.") ``` --- ## 6. **表单标签和样式(Bootstrap)** 你可以用 `{{ form }}` 渲染整个表单,也可以逐个渲染字段: ```html <div class="form-group"> {{ form.name.label_tag }} {{ form.name }} {{ form.name.errors }} </div> ``` 如果想用 Bootstrap 样式,可以使用第三方库如 [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms)。 --- ## 总结 | 类型 | 用途 | |------------|--------------------------------| | `Form` | 手动创建表单 | | `ModelForm`| 与模型绑定,自动生成字段 | | `clean()` | 自定义验证逻辑 | | `is_valid()` | 验证数据是否合法 | | `cleaned_data` | 获取验证后的数据 | --- 如果你有具体需求(比如文件上传、动态表单、异步提交等),我可以提供更详细的示例!
上一篇:
Django 模型
下一篇:
Django 视图
标题录入,一次不能超过6条
返回顶部
留言
留言
评论