# 表单使用 Django提供对表单处理的支持,可以简化并自动化大部分的表单处理工作。 ## 1 定义表单类 表单系统的核心部分是Django 的Form类。 Django 的数据库模型描述一个对象的逻辑结构、行为以及展现给我们的方式,与此类似,Form类描述一个表单并决定它如何工作和展现。 假如我们想在网页中创建一个表单,用来获取用户想保存的图书信息,可能类似的html 表单如下: ```html <form action="" method="post"> <input type="text" name="title"> <input type="date" name="pub_date"> <input type="submit"> </form> ``` 我们可以据此来创建一个Form类来描述这个表单。 新建一个**forms.py**文件,编写Form类。 ```python from django import forms class BookForm(forms.Form): title = forms.CharField(label="书名", required=True, max_length=50) pub_date = forms.DateField(label='出版日期', required=True) ``` 注:[表单字段类型参考资料连接](https://yiyibooks.cn/xx/Django_1.11.6/ref/forms/fields.html) ## 2 视图中使用表单类 ```python from django.shortcuts import render from django.views.generic import View from django.http import HttpResponse from .forms import BookForm class BookView(View): def get(self, request): form = BookForm() return render(request, 'book.html', {'form': form}) def post(self, request): form = BookForm(request.POST) if form.is_valid(): # 验证表单数据 print(form.cleaned_data) # 获取验证后的表单数据 return HttpResponse("OK") else: return render(request, 'book.html', {'form': form}) ``` * form.is_valid() 验证表单数据的合法性 * form.cleaned_data 验证通过的表单数据 ## 3 模板中使用表单类 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>书籍</title> </head> <body> <form action="" method="post"> {% csrf_token %} {{ form }} <input type="submit"> </form> </body> </html> ``` * csrf_token 用于添加CSRF防护的字段 * form 快速渲染表单字段的方法 ## 4 模型类表单 如果表单中的数据与模型类对应,可以通过继承**forms.ModelForm**更快速的创建表单。 ```python class BookForm(forms.ModelForm): class Meta: model = BookInfo fields = ('btitle', 'bpub_date') ``` * model 指明从属于哪个模型类 * fields 指明向表单中添加模型类的哪个字段