一、FormView 核心功能
FormView 是 Django 的通用类视图,专门用于处理表单的 显示 和 提交。它与普通视图的区别在于:
- 自动处理 GET/POST 请求
- 内置表单验证逻辑
- 简化成功提交后的跳转流程
- 支持自定义表单初始化
二、基础使用(用户注册示例)
1. 创建表单类
# forms.py
from django import forms
from django.contrib.auth.models import User
class RegisterForm(forms.Form):
username = forms.CharField(max_length=30)
email = forms.EmailField()
password = forms.CharField(widget=forms.PasswordInput)
confirm_password = forms.CharField(widget=forms.PasswordInput)
def clean(self):
cleaned_data = super().clean()
if cleaned_data.get('password') != cleaned_data.get('confirm_password'):
self.add_error('confirm_password', "密码不一致")
return cleaned_data
2. 配置 FormView
# views.py
from django.views.generic import FormView
from django.urls import reverse_lazy
from .forms import RegisterForm
class RegisterView(FormView):
template_name = 'accounts/register.html' # 模板路径
form_class = RegisterForm # 关联的表单类
success_url = reverse_lazy('login') # 成功提交后跳转地址
def form_valid(self, form):
# 处理有效表单数据
User.objects.create_user(
username=form.cleaned_data['username'],
email=form.cleaned_data['email'],
password=form.cleaned_data['password']
)
return super().form_valid(form)
3. URL 配置
# urls.py
from django.urls import path
from .views import RegisterView
urlpatterns = [
path('register/', RegisterView.as_view(), name='register'),
]
4. 基础模板
<!-- accounts/register.html -->
<form method="post">
{% csrf_token %}
{
{ form.as_p }}
<button type="submit">注册</button>
</form>