一、Forms介绍:
在前端和 Django 中,表单(Forms)是用来收集和提交用户数据的重要工具。虽然前端和 Django 中的表单都有相似的目的,但它们在实现方式和用法上略有不同。
1、在前端中:
首先得清楚,表单就是用来提交数据的。
在from中,action="提交地址",method="" 表示提交形式。
最为重要的就是:表单控件:
1.输入类:
input text表示文本 ,number数字输入类 ,password表示输入密码(输入密码时候不能在屏幕中显示出) ,name="key"提取数据(value) 没有name就无法提交输入的参数 也可以直接设置value值 就不用输入东西。
placeholder表示未输入时候的 提示内容。
disabled 禁止选中(不能输入了)。
2.选择类:
type="radio" radio表示单选框要单选的话name必须一样 value表示的是选中这个选项的值.type="checkbox" 表示多选 checked表示默认选中.
3.下拉选择:
select里面 要选择的数据用option。
4.文本域:
就相当于一个文本输入框 textarea。
2.在Django中:
forms组件:通过后端在 Django 中定义类对象方式,在 HTML 页面中动态实现一个表单;在后端中检验用户提交的数据。
二、Forms在Django中的应用:
在 Django 中,表单通常定义在 forms.py 文件中,通过继承 django.forms.Form 或django.forms.ModelForm 类来创建。表单类中的每个字段都是一个表单字段对象,它们定义了表单中的输入字段类型以及验证规则等。
1、动态 forms 表单:
创建简单表单:
导入 forms 组件
from django import forms
自定义 forms 表单类 , 表单类必须继承 forms.Form
Django 提供 forms 组件中么有按钮标签
class MyForm(forms.Form):
表单中的文本框标签,定义为属性
定义好之后 , 渲染到 html 页面中是一个 label 标签和 input 标签
username = forms.CharField(label='用户名')
password = forms.CharField(label='密码')
def show_forms(request):
渲染表单,生成一个表单类对象 , 将这个对象传递到 html 页面中
my_forms = MyForm()
return render(request , 'forms_django.html' , locals())
'
运行运行
{% csrf_token %} {{ my_forms }} 具体操作细节上述代码中都有注释。
上述三块代码分别是在forms.py文件,view.py文件,html文件中的。
注意:
1.在Django中没有forms组件的按钮标签。
2.上述是以post请求为例子,注意设置命令'{% csrf_token %}'。
2、在模板中渲染自定义的表单类:
1.使用表格渲染:
{% csrf_token %}
使用表格的样式渲染
{{ my_forms.as_table }} 2.使用段落渲染: {% csrf_token %}
使用段落的样式渲染
{{ my_forms.as_p }} 3.使用列表渲染: {% csrf_token %}
使用列表的样式渲染
{{ my_forms.as_ul }} 4.自定义渲染: {% csrf_token %}
自定义渲染
{{ my_forms.username.label }}:{{ my_forms.username }}
{{ my_forms.password.label }}:{{ my_forms.password }}
3、forms 组件提供的文本框设置: 注意:下述代码除了普通的文本框之外邮箱需要特别注意,因为邮箱它会自动识别格式。日期它会将文本框变为选择时间的。
导入 forms 组件
from django import forms
自定义 forms 表单类 , 表单类必须继承 forms.Form
Django 提供 forms 组件中么有按钮标签
class MyForm(forms.Form):
表单中的文本框标签,定义为属性
定义好之后 , 渲染到 html 页面中是一个 label 标签和 input 标签
username = forms.CharField(label='用户名')
password = forms.CharField(label='密码',
设置 password 文本框,这样密码就不显示出来了
widget=forms.PasswordInput())
邮箱
email = forms.EmailField(label="邮箱")
日期
day = forms.DateField(label='日期',
设置日期日历选项
widget=forms.TextInput(attrs={'type':'date'}))
选项框
choices 设置选项内容,内容要以元组类型
gender = forms.ChoiceField(choices=((1 , '男'),(2 , '女'),(3 , '未知')) , label='性别',
设置选项框类型: 单选 RadioSelect
widget=forms.RadioSelect(),
设置默认选项
initial=3)
work = forms.ChoiceField(choices=((1 , '搬砖'),(2 , '退休'),(3 , '学生')) , label='职业',
设置选项框类型: 单选 Select
widget=forms.Select(),
设置默认选项
initial=2)
subject = forms.MultipleChoiceField(choices=((1 , 'python'),(2 , 'java'),(3 , 'C'),
(4 , 'C#'),(5 , 'linux'),(6 , '大数据')) ,
label='科目',
设置选项框类型: 多选 CheckboxSelectMultiple
widget=forms.CheckboxSelectMultiple(),
设置默认选项
initial=[1, 2 , 6])
hobby = forms.ChoiceField(choices=((1 , '爬山'),(2 , '旅游'),(3 , '徒步'),
(4 , '唱歌'),(5 , '篮球'),(6 , '跆拳道')) ,
label='爱好',
设置选项框类型: 多选 CheckboxSelectMultiple
widget=forms.CheckboxSelectMultiple(),
设置默认选项
initial=[1, 2 , 6])
xy = forms.CharField(label='为了你好的协议' , widget=forms.CheckboxInput())
4、forms 验证数据:
使用 forms 组件进行校验用户表单提交的数据。
数据验证
class RegisterForm(forms.Form):
username = forms.CharField(max_length=15 , min_length=3,
设置错误信息字典
error_messages={
"max_length" : "用户名长度超出",
"min_length" : "用户名长度过短",
"required" : "不允许为空"
})
password = forms.CharField(max_length=15 , min_length=6,
设置错误信息字典
error_messages={
"max_length" : "密码长度超出",
"min_length" : "密码长度过短",
"required" : "不允许为空"
})
password2 = forms.CharField(max_length=15 , min_length=6,
设置错误信息字典
error_messages={
"max_length" : "密码长度超出",
"min_length" : "密码长度过短",
"required" : "不允许为空"
})
上述的代码中: error_messages它是为了涉及错误字典,就是当出现错误,会显示字典值里面的内容。
此时在视图文件中:
注意:访问html一般都为get请求,我们自己设置的提交表单数据为post请求,如下述代码就能更好的区分。
class RegisterView(View):
def get(self , request):
return render(request , 'register.html')
def post(self , request):
# 生成一个表单类对象
# 验证数据,将数据传递给表单类;表单类接收的数据是字典类型的数据
register_form = RegisterForm(request.POST)
# 判断数据是否合法
# is_valid 判断表单类中的数据是否检验合法 , 合法返回 True
if register_form.is_valid():
res = "注册成功"
else:
res = "注册失败"
return render(request , 'register.html' , locals())
注意:其中最为主要的一个点就是要以POST请求将我们输入的数据传输到我们自己设计的用来检验的类视图当中,其中'is_valid' 判断表单类中的数据是否检验合法 , 合法返回 True。