🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
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 指定要添加到表单中的字段