django可以帮助我们创建表单,并完成大部分的处理工作。
django中的Form组件有以下几个功能:
1. 自动生成HTML表单元素
2. 检查表单数据的合法性
3. 如果验证错误,重新显示表单(数据不会重置)
4. 数据类型转换(字符类型的数据转换成相应的Python类型)
## 创建表单
form表单继承 `django.forms` 下的 `Form` 类
```python
from django import forms
class BookForm(forms.Form):
title = forms.CharField(label="书名", required=True, max_length=20)
date = forms.DateField(label="创建日期", required=True)
```
## 前端显示
使用表单自动生成HTML表单元素,只需要创建表单类的对象,并返回即可
```python
class Books(View):
def get(self, request):
form = BookForm()
context = {'form': form}
return render(request, 'index.html', context)
def post(self):
pass
```
在模板中使用表单也很简单,把后端返回的表单类对象直接写入 `<form>` 标签即可。
```HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post">
{% csrf_token %}
{{ form }}
<input type="submit">
</form>
</body>
</html>
```
- csrf_token 添加CSRF防护的字段
访问视图函数,可以看到我们创建好的表单
![](https://box.kancloud.cn/42c79c6a5c74a9c3e50ef92e5b42cf30_545x265.png)
## 获取数据
```python
class Books(View):
def get(self, request):
form = BookForm()
context = {'form': form}
return render(request, 'index.html', context)
def post(self, request):
form = BookForm(request.POST)
if form.is_valid():
print(form.cleaned_data)
return HttpResponse("成功")
else:
context = {'form': form}
return render(request, 'index.html', context)
```
- is_valid() 验证数据合法性
- cleaned_data 取出所有数据
## ModelForm
当表单数据和模型类中的数据一样时,我们可以使用 `ModelForm` 快速创建表单
```python
from book.models import Book
class BookForm(forms.ModelForm):
class Meta:
model = Book
fields = ('b_title', 'b_pub_date')
```
- modle 指定模型类
- fields 指定要添加到表单中的字段
- 1.介绍
- 2.工程搭建
- 2.1.环境配置
- 2.2.创建工程
- 2.3.创建子应用
- 2.3.1.pycharm打开项目
- 2.4.创建视图
- 3.基本配置
- 3.1.settings基本配置项
- 3.2.路由配置
- 4.请求响应
- 4.1.request
- 4.2.response
- 4.3.cookie
- 4.4.session
- 5.类视图中间件
- 5.1.类视图
- 5.2中间件
- 6.数据库
- 6.1.数据库配置
- 6.2定义模型类
- 6.3数据库迁移
- 6.4数据库操作
- 6.5查询集
- 6.6模型管理器
- 7.模板表单
- 7.1使用模板
- 7.2模板标签
- 7.3表单
- 8.后台管理
- 8.1Admin
- 8.2自定义模型类样式
- 8.3列表页